単体テストを実行すると、次のエラーが表示されます。Input::get をコンストラクターに渡すのは好きではないようですが、ブラウザー内でスクリプトを実行すると、アクションは正常に機能するため、コントローラー コードではないことがわかります。「task_update」コードのいずれかを取り出すと、入力があっても検索だけでテストに合格します。そのため、1 つのメソッドの入力を受け入れる理由がわかりません。
ErrorException: Argument 1 passed to Illuminate\Database\Eloquent\Model::__construct() must be of the type array, null given, called
私のコントローラーは:
public function store()
{
$task_update = new TaskUpdate(Input::get('tasks_updates'));
$task = $this->task->find(Input::get('tasks_updates')['task_id']);
$output = $task->taskUpdate()->save($task_update);
if (!!$output->id) {
return Redirect::route('tasks.show', $output->task_id)
->with('flash_task_update', 'Task has been updated');
}
}
そしてテストは - task_updates 配列の入力を設定していますが、ピックアップされていません:
Input::replace(['tasks_updates' => array('description' => 'Hello')]);
$mockClass = $this->mock;
$mockClass->task_id = 1;
$this->mock->shouldReceive('save')
->once()
->andReturn($mockClass);
$response = $this->call('POST', 'tasksUpdates');
$this->assertRedirectedToRoute('tasks.show', 1);
$this->assertSessionHas('flash_task_update');