Laravel 功能测试 ajax 控制

Laravel functional testing ajax control

在laravel 5.4中可以看到有方法如:

$browser->pause(1000);
$browser->waitFor('.selector');
$browser->waitForLink('Create');

但我在 Laravel 5.3 中没有看到这些。

我们有两个链接的 select 盒子,其中第二个 select 盒子的值是根据第一个 select 盒子的 selection 通过 ajax 加载的。问题是,当我们 运行 测试时,laravel 不会等待第二个 selectbox/ajax 加载,这使得测试失败,因为它无法 select 来自第二个 select箱子。

$this->visit('/department');
$this->select('1', 'country_id');
$this->select('1', 'region_id'); // problem here
// rest of code

我也试过使用sleep()但是没用。

知道如何在 5.3 中对此类场景进行功能测试吗?谢谢

默认情况下,laravel 5.3不支持此功能。因为他们使用 Dusk.

在 laravel 5.4 中引入了 Ajax 测试

检查此 post :https://laravel-news.com/laravel-dusk-is-coming

不过,我们很幸运。

正在查看 dusk 的 composer.json。您可以在 laravel 5.3 中使用它,因为它的依赖项是 "illuminate/support" : "~5.3",它由 Laravel 5.3.

满足

您需要做的就是:composer require laravel/dusk

在此处检查 composer.jsonhttps://github.com/laravel/dusk/blob/master/composer.json

编辑:

依赖性存在问题。我创建了一个解决依赖性问题的新包。我有 运行 所有测试用例。它没有给我任何错误。

您可以使用以下命令使用此包:composer require pankitgami/dusk

在这里查看:https://packagist.org/packages/pankitgami/dusk

seeJsonEquals 用于验证精确 JSON 匹配

    $this->post('/user', ['name' => 'Sally'])
         ->seeJsonEquals([
             'created' => true,
         ]);