And*_*eas 3 phpunit laravel laravel-dusk
我正在运行脚本
namespace Tests\Browser;
use App\User;
use Tests\DuskTestCase;
use Laravel\Dusk\Browser;
use Illuminate\Foundation\Testing\RefreshDatabase;
class RegistrationTest extends DuskTestCase
{
use RefreshDatabase;
/** @test */
public function a_user_registers_for_an_account()
{
$this->browse(function (Browser $browser)
{
$browser->visit(route('app-registration-create'))
->type('name', 'John')
->type('lastName', 'Doe')
->type('email', 'john.doe@ps.com')
->type('password', 'password')
->type('password_confirmation', 'password')
->click('@dusk-accept')
->click('@register-button') //
->assertDontSee('The name field is required.');
});
$this->assertDatabaseHas('users', [
'email' => 'john.doe@ps.com',
'verified' => 0
]);
}
/** @test */
public function a_user_confirms_a_email_address()
{
$this->browse(function (Browser $browser)
{
$user = User::where('email', 'john.doe@ps.com')->first();
var_dump(route('app-registration-confirm-email', ['token' => $user->token])); // "http://ps.dev/app/registration/confirm/aPAWN1QlGyl8Id2vXIJU9Fn8G6bsef"
$browser->visit(route('app-registration-confirm-email', ['token' => $user->token]));
});
$this->assertDatabaseHas('users', [
'email' => 'john.doe@ps.com',
'verified' => 1
]);
}
}
Run Code Online (Sandbox Code Playgroud)
当它击中线时
$browser->visit(route('app-registration-confirm-email', ['token' => $user->token]));
Run Code Online (Sandbox Code Playgroud)
它停止工作。该步骤背后的想法是验证用户是否提供了有效的电子邮件地址。因此,应用程序将从 URL 中获取令牌并检查数据库中是否有用户使用该令牌。如果是,请将已验证的属性设置为 1,并将令牌设置为 null。
但我收到以下错误:
在 laravel.log 文件中,我可以看到:
[2017-10-17 13:24:30] testing.ERROR: SQLSTATE[HY000]: General error: 5
database is locked (SQL: update "users" set "verified" = 1, "token" = ,
"updated_at" = 2017-10-17 13:23:30 where "id" = 1)
Run Code Online (Sandbox Code Playgroud)
在终端上,我可以看到:
There was 1 error:
1) Tests\Browser\RegistrationTest::a_user_confirms_a_email_address
Facebook\WebDriver\Exception\WebDriverCurlException: Curl error thrown for http GET to /session/856dbb7e7769ec0a369e44e13b6b676d/screenshot
Operation timed out after 30000 milliseconds with 0 bytes received
/home/vagrant/ps/vendor/facebook/webdriver/lib/Remote/HttpCommandExecutor.php:286
/home/vagrant/ps/vendor/facebook/webdriver/lib/Remote/RemoteWebDriver.php:535
/home/vagrant/ps/vendor/facebook/webdriver/lib/Remote/RemoteWebDriver.php:333
/home/vagrant/ps/vendor/laravel/dusk/src/Browser.php:244
/home/vagrant/ps/vendor/laravel/dusk/src/TestCase.php:160
/home/vagrant/ps/vendor/laravel/framework/src/Illuminate/Support/Collection.php:341
/home/vagrant/ps/vendor/laravel/dusk/src/TestCase.php:161
/home/vagrant/ps/vendor/laravel/dusk/src/TestCase.php:94
/home/vagrant/ps/tests/Browser/RegistrationTest.php:51
Run Code Online (Sandbox Code Playgroud)
也许我没有正确应用黄昏,但我在网上找不到解决方案。
这是一个已经有点老的问题,但我自己找到了解决这个问题的方法。问题是在测试之间没有关闭连接。如果我一次只调用 1 个,但运行一批测试会抛出数据库锁定错误,我的测试将起作用。
解决方案是我parent::tearDown();在自己的拆卸功能中缺少。这意味着连接不会在测试之间关闭。
对于被问到的问题,最有可能tearDown在DuskTestCase或 另一个测试中没有parent::tearDown();在那里的功能。检查一下,您应该能够在某处找到问题。
TLDR:检查您的tearDown函数并确保它们包含parent::tearDown();. 否则在测试之后连接不会被关闭。
| 归档时间: |
|
| 查看次数: |
970 次 |
| 最近记录: |