我开始使用 Laravel Dusk 进行浏览器测试,并创建了几个测试来测试我的登录表单。我有以下代码:
class LoginTest extends DuskTestCase
{
public function testLogin()
{
$this->browse(function (Browser $browser) {
$browser->visit('/admin')
->type('email', 'inigo@mydomain.co.uk')
->type('password', 'MyPass')
->press('Login')
->assertSee('Loading...');
});
}
public function testLoginFailure(){
$this->browse(function (Browser $browser){
$browser->visit('/admin/logout'); // I have to add this to logout first, otherwise it's already logged in for this test!
$browser->visit('/admin')
->type('email', 'someemail@afakedomain.com')
->type('password', 'somefakepasswordthatdoesntwork')
->press('Login')
->assertSee('These credentials do not match our records.');
});
}
见评论。第一个函数运行良好,但是当涉及到第二个函数时,我必须先注销,因为运行第一个函数后用户已经登录。这让我感到惊讶,因为我认为单元测试是完全独立的,会话数据会自动销毁。
有没有更好的方法来做到这一点 - 一些我可能错过的 Dusk 方法 - 而不是必须调用$browser->visit('/admin/logout');
?
谢谢
编辑感谢到目前为止的 2 个答案,这两个答案似乎都是有效的解决方案。我已将第二个函数更新为以下内容:
public function testLoginFailure(){
$this->createBrowsersFor(function(Browser $browser){
$browser->visit('/admin')
->type('email', 'someshit@afakedomain.com')
->type('password', 'somefakepasswordthatdoesntwork')
->press('Login')
->assertSee('These credentials do not match our records.');
});
}
哪个工作。所以
- 我可以放心地假设第二个浏览器只在这个单一功能的持续时间内存在,对吗?
- 创建第二个浏览器实例而不是使用拆卸方法有哪些明显的优点/缺点?