gpt4 book ai didi

php - Laravel - 输入未通过单元测试

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:35:36 24 4
gpt4 key购买 nike

我在运行单元测试时收到以下错误。似乎它不喜欢将 Input::get 传递给构造函数,但是当在浏览器中运行脚本时,操作工作正常,所以我知道它不是 Controller 代码。如果我取出任何“task_update”代码,即使有输入,测试也会通过 find - 所以不确定为什么它接受一种方法的输入。

ErrorException: Argument 1 passed to Illuminate\Database\Eloquent\Model::__construct() must be of the type array, null given, called

我的 Controller 是:

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');

最佳答案

我相信“call”函数正在吹走 Input::replace 所做的工作。

调用函数实际上可以采用 $parameters 参数来解决您的问题。

如果你查看\Illuminate\Foundation\Testing\TestCase@call,你会看到函数:

/**
* Call the given URI and return the Response.
*
* @param string $method
* @param string $uri
* @param array $parameters
* @param array $files
* @param array $server
* @param string $content
* @param bool $changeHistory
* @return \Illuminate\Http\Response
*/
public function call()
{
call_user_func_array(array($this->client, 'request'), func_get_args());

return $this->client->getResponse();
}

如果你这样做:

$response = $this->call('POST', 'tasksUpdates', array('your data here'));

我认为它应该有效。

关于php - Laravel - 输入未通过单元测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21584999/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com