gpt4 book ai didi

testing - 如何使用 Mockery 测试使用 Ardent 模型的 Controller ?

转载 作者:行者123 更新时间:2023-11-28 21:31:27 25 4
gpt4 key购买 nike

我正在尝试在 Laravel Controller 中测试此功能:

/**
* Store a newly created resource in storage.
*
* @return Response
*/
public function store()
{
$project = $this->project->create(Input::all());
if ( $errors = $project->errors()->all() ) {
return Redirect::route('projects.create')
->withInput()
->withErrors($errors);

}
return Redirect::route('projects.index')
->with('flash', Lang::get('projects.project_created'));

}

我的(错误的)测试是这样的:

public function testStoreFails()
{
$this->mock->shouldReceive('create')
->once()
->andReturn(Mockery::mock(array(
false,
'errors' => array()
)));
$this->call('POST', 'projects');
$this->assertRedirectedToRoute('projects.create');
$this->assertSessionHasErrors();
}

问题基本上是,当验证失败时,Ardent 将 $project 设置为 false,但它也会在同一对象上设置错误,可以使用 ->errors()->all() 检索这些错误。

我完全迷失了试图找出在模拟中返回的内容。

注意:构造函数注入(inject)模型:

public function __construct(Project $project)
{
$this->project = $project;

$this->beforeFilter('auth');
}

最佳答案

– 根据回答中的评论进行编辑 –

如果我理解您要正确执行的操作,您可以这样做:

  • 模拟 create() 方法以返回模拟的 Project
  • 模拟 save() 方法返回 false。
  • 模拟 MessageBag实例,它是 errors() 将返回的对象。这个模拟应该有一个模拟的 all() 方法。
  • 使模拟的 errors() 方法返回 MessageBag 模拟。

假设 $this->mockProject 类的模拟:

// given that $this->mock = Mockery::mock('Project')

public function testStoreFails()
{
// Mock the create() method to return itself
$this->mock->shouldReceive('save')->once()->andReturn(false);

// Mock MessageBag and all() method
$errors = Mockery::mock('Illuminate\Support\MessageBag');
$errors->shouldReceive('all')->once()->andReturn(array('foo' => 'bar'));

// Mock errors() method from model and make it return the MessageBag mock
$this->mock->shouldReceive('errors')->andReturn($errors);

// Proceed to make the post call
$this->call('POST', 'projects');
$this->assertRedirectedToRoute('projects.create');
$this->assertSessionHasErrors();
}

关于testing - 如何使用 Mockery 测试使用 Ardent 模型的 Controller ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20476426/

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