Laravel登录测试在phpunit中失败了

时间:2018-05-16 07:44:14

标签: laravel laravel-5 phpunit

我想在laravel中通过phpunit进行登录测试。我有5.5所以不支持访问方法。这就是我正在做的事情

public function testLoginPost(){
Session::start();

$response = $this->call('POST', 'login', [
    'email' => 'sokhter@yahoo.com',
    'password' => '123456',
    '_token' => csrf_token()
]);
$this->assertEquals(200, $response->getStatusCode());
$this->assertEquals('auth.login', $response->original->name());}

```

c:\wamp64\www\fundtheneedy\tests\Unit>phpunit Fundtheneedy
PHPUnit 6.5.8 by Sebastian Bergmann and contributors.

.F                                                                  2 / 2 (100%)

Time: 321 ms, Memory: 14.00MB

There was 1 failure:

1) Tests\Unit\Fundtheneedy::testLoginPost
Failed asserting that 302 matches expected 200.

C:\wamp64\www\fundtheneedy\tests\Unit\Fundtheneedy.php:30

FAILURES!
Tests: 2, Assertions: 2, Failures: 1.
```

2 个答案:

答案 0 :(得分:0)

如果您纯粹查看响应代码,它将始终为302,这是URL重定向的响应代码,因为它将重定向,无论它是否失败。

您可以改为查看会话中是否存在错误,这是本文中提到的一种解决方法here.

$this->assertSessionMissing('errors');

答案 1 :(得分:0)

鉴于您将始终被重定向,无论登录成功或失败,您都必须断言您所获得的响应。

要测试成功登录,您可以执行以下操作:

$response->assertStatus(302);
$response->assertRedirect('http://your-website.com/user/dashboard');

要测试登录失败,您可以执行以下操作:

$response->assertStatus(302);
$response->assertRedirect('http://your-website.com/auth/login');

这应该足够了。

PS:显然,编辑网址以匹配您拥有的网址。