避免重定向::回到嘲弄

时间:2014-03-14 11:53:33

标签: php unit-testing laravel-4 mockery

我只是想写一些关于Laravel 4密码提醒的测试:

我想避免执行此操作:

case Password::INVALID_USER:
    return Redirect::back()->with('error', Lang::get($response));

我试过了:

Redirect::shouldReceive('back')->once();

我收到了错误:

  

PHP致命错误:在非对象上使用()调用成员函数

我发现当调用有参数时如何调整mockery,而不是如何避免这个问题。

任何人都可以帮助我吗?

2 个答案:

答案 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方法。