当你使用一个 laravel 5.4 开始你的应用程序时,laravel dusk 给我们带来一个在浏览器测试的api,它给我们一个内置的 chromedriver , 当然别的浏览器要使用的话,可以使用 selenium 。】当你的环境支持 laravel 5.4 时,第一步是安装一个 demo ,我们使用composer安装laravel
composer create-project --prefer-dist laravel/laravel demo
安装 laravel duskcomposer require laravel/dusk
在你的 laravel 应用中注册 duskserviceprovider,有两个方法
方法一我们可以在 config/app.php文件中 providers数组中注册,
app\providers\routeserviceprovider::class,laravel\dusk\duskserviceprovider::class,
这种方法会在 laravel 中全局注册,如果不想要全局注册我们使用方法二。
方法二在安装环境中的 appserviceprovider 注册 duskserviceprovider
namespace app\providers;
use illuminate\support\serviceprovider;
use laravel\dusk\duskserviceprovider;
class appserviceprovider extends serviceprovider{
    /**
     * register any application services.
     *
     * @return void
     */
    public function register()
    {
        if ($this->app->environment('local', 'testing', 'staging')) {           
        $this->app->register(duskserviceprovider::class);
        }
    }
}
接下来我们安装 dusk#
php artisan dusk:install
接下来开始我们的测试第一个测试首先我们完成laravel的认证机制。
php artisan make:auth
我们创建一个 dusk 测试
php artisan dusk:make logintest
上面这个命令会在 tests\browser 目录下创建一个 logintest 类
<?php
namespace tests\browser;
use tests\dusktestcase;
use illuminate\foundation\testing\databasemigrations;
class logintest extends dusktestcase{
    /**
     * a dusk test example.
     *
     * @return void
     */
    public function testexample()
    {
        $this->browse(function ($browser) {
            $browser->visit('/')
                    ->assertsee('laravel');
        });
    }
注意:登录的话需要用户,我们已经添加了测试用户。
添加测试用户
1.执行命令创建 user 表
php artisan migrate
2.使用 tinker 命令添加10条测试数据
php artisan tinker
factory(app\user::class, 10)->create();
当然我们自然也可以自己注册。测试的话需要知道用户名和密码。
邮箱: moocfans@moocfans.cn 
密码: moocfans
我们在 logintest 类中添加一个验证用户登录成功并返回欢迎页的测试用例。
    /**
 * a dusk test example.
 *
 * @return void
 */
public function test_i_can_login_successfully()
{
    $this->browse(function ($browser) {
        $browser->visit('/login')
                ->type('email', 'moocfans@moocfans.cn')
                ->type('password', 'moocfans')
                ->press('login')
                ->assertsee('you are logged in!');
    });
}
接下来我们开始测试
php artisan dusk
如果你的数据库有正确的数据,则会返回下面的结果。
注意 chrome版本需>54
失败的测试我们可以刻意的修改一个错误的测试用例, phpunit 给我们抛出的错误提示。我们先把登录密码改成 1
public function test_i_can_login_successfully()
    {
        $this->browse(function ($browser) {
            $browser->visit('/login')
                    ->type('email', 'moocfans@moocfans.cn')
                    ->type('password', '1')
                    ->press('login')
                    ->assertsee('you are logged in!');
        });
    }
用户名和密码不匹配。所以有错误提示。dusk 会把错误截图直接放到 \tests\browser\screenshots 中,以方便大家可以更加准确的查找错误。
测试ajax调用#
dusk 当然也可以测试ajax调用。 
有一个完美的测试用例,在github上 ajax测试demo 
我们下载下来直接可以用。
创建一个新的测试用例的过程,创建测试用例
php artisan dusk:make createtasktest
然后编辑测试用例
  class createtasktest extends dusktestcase{    /**
     * a dusk test example.
     *
     * @return void
     */
    public function test_i_can_create_task_successfully()
    {
        $this->browse(function ($browser) {
            $browser->visit('/tasks/create')
                    ->type('title', 'my task')
                    ->press('add task')
                    ->pause(5000)
                    ->assertpathis('/tasks');
        });
    }
}
测试用例的执行过程
1.输入标题 
2.单击“添加任务”按钮 
3.等待5秒 
4.然后重定向到任务页
我们也可以使用 waituntilmissing 来执行 dusk 的 api
<?phpnamespace tests\browser;
use tests\dusktestcase;
use illuminate\foundation\testing\databasemigrations;
class createtasktest extends dusktestcase{
    /**
     * a dusk test example.
     *
     * @return void
     */
    public function test_i_can_create_task_successfully()
    {
        $this->browse(function ($browser) {
            $browser->visit('/tasks/create')
                    ->type('title', 'my task')
                    ->press('add task')
                    ->waituntilmissing('.btn-primary')
                    ->assertpathis('/tasks');
        });
    }
}
更多的api请查看 laravel 5.4 文档
在看另外一个例子#
模式对话框绑定你的登录email 
创建这个测试用例的过程。
登录 
找到 链接 support email 
单击 support email 
看到你绑定的email 
根据上面的过程,我们创建测试用例 
首先,先创建一个名为 supportemailstest 测试用例
php artisan dusk:make supportemailstest
编辑测试用例
class supportemailstest extends dusktestcase{
    /**
     * a dusk test example.
     *
     * @return void
     */
    public function test_i_can_open_modal_for_support_emails()
    {
        $this->browse(function ($browser) {
            $user = factory(user::class)->create();
            $browser->loginas($user)
                    ->visit('/tasks')
                    ->clicklink('support email')
                    ->whenavailable('#modal-support', function ($modal) use($user) {
                        $modal->assertinputvalue('#support-from', $user->email);
                    });
        });
    }
}
我们来执行这个测试用例
php artisan dusk tests/browser/supportemailstest.php
页面dusk 的 pages 是功能强大的可重用的测试类。 
让我们使用 createtasktest 创建页面重构。
php artisan dusk:page createtaskpage
创建的页面会存放在 tests/browser/pages 目录中
我们来编辑这个类
public function url(){
    return '/tasks/create';
}
url 可以导航 dusk 执行的地址。
public function assert(browser $browser){
    $browser->assertpathis($this->url());
}
assert 定义页面的 assertions,当使用 createtaskpage 时,这些 assertions 将会使用 assert 方法执行。 
在上面的例子中,我们只是明确 url 是正确的。
public function elements(){
    return [        '@addtask' => '.btn-primary',
    ];
}
elements 方法可以定义选择器。我们可以定义程序可读的名称选择器和重用他们的网页在不同的测试案例。在上面的示例中,我定义了添加任务按钮的选择器。 
现在让我们修改 createtasktest 类并使用选择器:
class createtasktest extends dusktestcase{    /**
     * a dusk test example.
     *
     * @return void
     */
    public function test_i_can_create_task_successfully()
    {
        $this->browse(function ($browser) {
            $user = factory(user::class)->create();
            $browser->loginas($user)
                    ->visit(new createtaskpage)
                    ->type('title', 'my task')
                    ->click('@addtask')
                    ->waituntilmissing('@addtask')
                    ->assertpathis('/tasks');
        });
    }
}
我们修改看了 createtaskpage。现在让我们重新运行我们的测试,看看是否一切正常: 
和上面测试一样,因此图我就用了同一个。
以上就是详细介绍laravel dusk浏览器测试更优雅的详细内容。
   
 
   