Enr*_*ent 20 php redirect phpunit laravel
我有一个控制器,在提交电子邮件后,执行重定向到家庭,如下所示:
return Redirect::route('home')->with("message", "Ok!");
Run Code Online (Sandbox Code Playgroud)
我正在为它编写测试,我不知道如何使phpunit遵循重定向,测试成功消息:
public function testMessageSucceeds() {
$crawler = $this->client->request('POST', '/contact', ['email' => 'test@test.com', 'message' => "lorem ipsum"]);
$this->assertResponseStatus(302);
$this->assertRedirectedToRoute('home');
$message = $crawler->filter('.success-message');
// Here it fails
$this->assertCount(1, $message);
}
Run Code Online (Sandbox Code Playgroud)
如果我替换控制器上的代码,我删除前两个断言,它的工作原理
Session::flash('message', 'Ok!');
return $this->makeView('staticPages.home');
Run Code Online (Sandbox Code Playgroud)
但我想用Redirect::route
.有没有办法让PHPUnit遵循重定向?
hun*_*tie 32
你可以让PHPUnit跟随重定向:
Laravel> = 5.5.19:
$this->followingRedirects();
Run Code Online (Sandbox Code Playgroud)
Laravel <5.4.12:
$this->followRedirects();
Run Code Online (Sandbox Code Playgroud)
用法:
$response = $this->followingRedirects()
->post('/login', ['email' => 'john@example.com'])
->assertStatus(200);
Run Code Online (Sandbox Code Playgroud)
注意:需要为每个请求明确设置.
对于这两者之间的版本:
有关解决方法,请参阅https://github.com/laravel/framework/issues/18016#issuecomment-322401713.
Héc*_*iam 12
Laravel 8 已测试
$response = $this->post'/contact', ['email' => 'test@test.com', 'message' => "lorem ipsum"]);
$response->assertStatus(302);
$response->assertRedirect('home');
$this->followRedirects($response)->assertSee('.success-message');
//or
$this->followRedirects($response)->assertSee('Ok!');
Run Code Online (Sandbox Code Playgroud)
为我工作,希望有帮助。
您可以通过这种方式告诉抓取工具遵循重定向:
$crawler = $this->client->followRedirect();
Run Code Online (Sandbox Code Playgroud)
所以在你的情况下,这将是这样的:
public function testMessageSucceeds() {
$this->client->request('POST', '/contact', ['email' => 'test@test.com', 'message' => "lorem ipsum"]);
$this->assertResponseStatus(302);
$this->assertRedirectedToRoute('home');
$crawler = $this->client->followRedirect();
$message = $crawler->filter('.success-message');
$this->assertCount(1, $message);
}
Run Code Online (Sandbox Code Playgroud)