質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.37%
DELETE

ファイルシステムからファイル、データベースからレコードを削除することまたはメモリ内のオブジェクトの割り当てを取り消すことをさします。もしくは、HTTPプロトコルのDELETEを指すこともあります。

Laravel

LaravelとはTaylor Otwellによって開発された、オープンソースなPHPフレームワークです。Laravelはシンプルで表現的なシンタックスを持ち合わせており、ウェブアプリケーション開発の手助けをしてくれます。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

ユニットテスト

ユニットテストは、システムのテスト手法の一つで、個々のモジュールを対象としたテストの事を指します。対象のモジュールが要求や性能を満たしているか確認する為に実行します。

テスト駆動開発

テスト駆動開発は、 プログラム開発手法の一種で、 プログラムに必要な各機能をテストとして書き、 そのテストが動作する必要最低限な実装を行い コードを洗練させる、といったサイクルを繰り返す手法の事です。

Q&A

解決済

1回答

11923閲覧

テストを実行すると404やNo query resultsと言われてしまい、showやdeleteがうまく実行出来ません。

tenlife

総合スコア70

DELETE

ファイルシステムからファイル、データベースからレコードを削除することまたはメモリ内のオブジェクトの割り当てを取り消すことをさします。もしくは、HTTPプロトコルのDELETEを指すこともあります。

Laravel

LaravelとはTaylor Otwellによって開発された、オープンソースなPHPフレームワークです。Laravelはシンプルで表現的なシンタックスを持ち合わせており、ウェブアプリケーション開発の手助けをしてくれます。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

ユニットテスト

ユニットテストは、システムのテスト手法の一つで、個々のモジュールを対象としたテストの事を指します。対象のモジュールが要求や性能を満たしているか確認する為に実行します。

テスト駆動開発

テスト駆動開発は、 プログラム開発手法の一種で、 プログラムに必要な各機能をテストとして書き、 そのテストが動作する必要最低限な実装を行い コードを洗練させる、といったサイクルを繰り返す手法の事です。

0グッド

0クリップ

投稿2020/10/20 21:49

編集2020/10/21 23:16

テストを勉強中のものです。

現在crudのdeleteのテストを実装しているのですが、実行するとそもそも削除するモデルが無いよと言う感じでエラーが表示されます。(自分の見解です)

解決したい事: deleteやshowのタイミングで404が表示されないようにしたいです。

現状: 実行すると404やNo query resultsが返ってきますが、$this->itemは取得できます。

error

1exception: Illuminate\Database\Eloquent\ModelNotFoundException {#3859 2#message: "No query results for model [App\Item] 9", 3 4上記$responseの中身 5 61) Tests\Feature\ItemManagement::test_ログインしているかつ、自分の投稿であれば削除出来る 7Expected status code 302 but received 404. 8Failed asserting that 302 is identical to 404. 9 10以下確認 11https://readouble.com/laravel/7.x/ja/eloquent.html

ItemManagement

1<?php 2 3namespace Tests\Feature; 4 5use App\Item; 6use App\User; 7use Illuminate\Foundation\Testing\RefreshDatabase; 8use Tests\TestCase; 9use Illuminate\Support\Facades\Auth; 10 11class ItemManagement extends TestCase 12{ 13 use RefreshDatabase; 14 15 public function setUp(): void 16 { 17 parent::setUp(); 18 $this->user = factory(User::class)->create(); 19 $this->item = factory(Item::class)->create(['user_id' => $this->user->id]); 20 } 21 22 public function test_ログインしているかつ、自分の投稿であれば削除出来る() 23 { 24 $this->actingAs($this->user); 25 26 $response = $this->delete(route('items.destroy', ['item' => $this->item->id])); 27 $response->assertStatus(302); 28 29 $response->assertRedirect('items'); 30 31 $this->assertDatabaseMissing('items', ['id' => $this->item->id]); 32 }

route

1Route::resource('items', 'ItemController');

試したこと、確認したこと

1, 普通に削除処理が出来るか。
2, キャッシュ削除
3, テスト用データベースのリセット
4, 下記の書き換え2つ

$response = $this->delete(route('items.destroy', ['item' => $this->item->id])); 下記に変更 $response = $this->deleteJson(route('items.destroy', ['item' => $this->item->id])); とか $response = $this->delete('items/'.$this->item->id);

5, モデルがないならそもそもshowページも行けない?
404が返ってきているので、deleteと同じ状態でした。
ただし、$responseを確認するところで$this->itemを実行すると値は取得できていました。delete時も出来ました。

// アクセス出来るか? $response = $this->get(route('items.show', ['item' => $this->item->id])); $response->assertStatus(200); $resoponseの中身 exception: Illuminate\Database\Eloquent\ModelNotFoundException {#3886 #message: "No query results for model [App\Item] 8" エラー Expected status code 200 but received 404. Failed asserting that 200 is identical to 404.

6, 編集の際にeditには遷移できる?
こちらは全く問題なく通ります。

$response = $this->actingAs($this->user); $response = $this->get(route('items.edit', ['item' => $this->item->id])); $response->assertStatus(200);

上記から

現状としては、

  • delete, showだとアクセスする為のモデルが存在しないと言われる。
  • 返り値は404。$responseはNo query results for model [App\Item].
  • だが、どちらも$this->itemを実行すると値は取得できる状態。($responseと同じタイミングで確認。)

$this->itemで取得出来るのに、なぜ404が返ってくるの?なんでeditはいけてshowがダメなのだろう?と言うところで止まってしまいました。
テストは初めて間もないので、足りない部分があるかもしれません。

どなたかお分かりになる方いましたら、知恵を貸して頂きたいです。
よろしくお願いいたします。

laravel7.x
PHP 7.4.8

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

自己解決

https://teratail.com/questions/299795

上記と同じ原初が起きていたと考えています

投稿2020/10/27 22:18

tenlife

総合スコア70

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.37%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問