【发布时间】:2015-06-19 07:38:10
【问题描述】:
这是我的测试代码:
public function testRegistrationFailsIfNameIsEmpty()
{
$this->flushSession();
$response = $this->call('POST', '/signup', ['fullname' => '']);
$this->assertSessionHasErrors('fullname'); // Passes, expected
$this->assertTrue($response->isRedirection()); // Passes, expected
$this->assertRedirectedTo('/signup'); // Fails, unexpected.
}
当我调用该方法时,它正在验证输入,如果验证失败,它会将我重定向回/signup 以显示验证错误。我已经在浏览器中手动测试了它,它按预期工作。
但是,当我运行上述单元测试时,最后一个断言失败,它认为我被重定向到 / 而不是 /signup。
我不知道它为什么这样做。如果我测试是否发生了重定向,则测试通过了,因为发生了重定向确实,它只是认为重定向是/而不是/signup。
我已经禁用了所有中间件,所以我知道它不像访客中间件那样认为我没有登录。
编辑:测试结果:
There was 1 failure:
1) RegistrationTest::testRegistrationFailsIfNameIsEmpty
Failed asserting that two strings are equal.
--- Expected
+++ Actual
@@ @@
-'http://localhost/signup'
+'http://localhost'
【问题讨论】:
-
你的代码有没有调试的可能,否则我建议安装这样的环境,它会有很多次的用处。
-
如何在浏览器中测试 POST 方法?你确定你没有测试 GET?
标签: php unit-testing laravel-5