我只是想写一些关于Laravel 4密码提醒的测试:
我想避免执行此操作:
case Password::INVALID_USER:
return Redirect::back()->with('error', Lang::get($response));
我试过了:
Redirect::shouldReceive('back')->once();
我收到了错误:
PHP致命错误:在非对象上使用()调用成员函数
我发现当调用有参数时如何调整mockery,而不是如何避免这个问题。
任何人都可以帮助我吗?
答案 0 :(得分:1)
我找到了一个解决方案但我仍然想知道如果有人知道如何用嘲弄来做这件事。
我这样做的错误:
$this->call('POST', 'password-reminder', $data)
是:
InvalidArgumentException: Cannot redirect to an empty URL.
这就是为什么我试图用嘲弄来避免Redirect :: back调用,但是你可以避免它这样做:
$this->call('POST', 'password-reminder', $data, array(), array('HTTP_REFERER' => '/password-reminder'));
你在HTTP_REFERER上写的网址确实无法用于测试。
查找:http://alexsears.com/article/testing-redirectback-laravel
答案 1 :(得分:0)
你的第一次测试应该只进行一次小调整。
$fakeRedir = Mockery:mock('Illuminate\Http\RedirectResponse');
Redirect::shouldReceive('back')->once()->andReturn($fakeRedir);
//you could do additional assertions on your $fakeRedir here
// $fakeRedir->shouldReceive('with')->once()->with(/* argument asserttions here*/);
$result = $yourInstance->yourMethodUnderTest();
$this->assertEquals($fakeRedir,$result);
您已经模拟了请求Facade以正确接收,但默认情况下,mocks返回null,除非另有指示使用shouldReturn方法。