测试 Laravel 新星
Testing Laravel Nova
目前我正在尝试为 laravel nova 编写功能测试,断言页面已正确加载并且可以看到数据。
然而,当我编写测试时,由于 laravel nova 的数据生成方式,我找不到断言显示正确文本的方法。最重要的是,当加载不存在的资源页面时,我似乎无法测试页面是否正确加载 laravel nova 的 404 页面作为 200 响应返回。
有没有人找到一个好的方法来测试 nova?
在您的项目目录中添加 app/config 文件:
App\Providers\NovaServiceProvider::class,
TL;DR:查看此存储库:https://github.com/bradenkeith/testing-nova。它帮助我找到了测试 Laravel Nova 的方法。
Laravel Nova 基本上是一个 CRUD 框架。所以我假设,当你说
"that the page is loaded correctly and data can be seen"
您实际上是说:我的资源加载正确。或者,我可以 create/update/delete 一个资源。这是因为 Nova 正在通过 api 调用异步加载其资源信息。
所以这就是为什么测试逻辑 的一个好方法是测试 /nova-api/
路由 .
例如:
<?php
namespace Tests\Feature\Nova;
use App\Note;
use Tests\TestCase;
class NoteTest extends TestCase
{
public function setUp(): void
{
parent::setUp();
}
/** @test */
public function it_gets_a_note()
{
// given
$note = factory(Note::class)->create();
$response = $this->get('/nova-api/notes/' . $note->id)
->assertStatus(200)
->assertJson([
'resource' => [
'id' => [
'value' => $note->id
]
]
]);
}
}
通过调用路由 https://my-app.test/resources/notes/1
,我们可以断言我们收到了 200 响应(成功)并且我们实际上正在返回我们新创建的注释。这是一个非常值得信赖的测试,可以确保资源详细信息页面正常工作。
但是,如果您在谈论 浏览器测试,您可能想看看 Laravel Dusk:
Laravel Dusk provides an expressive, easy-to-use browser automation and testing API.
安装完成后,即可开始真实浏览器测试:
$user = factory(User::class)->create();
$user->assignRole('admin');
$this->browse(function (Browser $browser) use ($user) {
$browser
->loginAs($user)
->visit('/')
->assertSee('Dashboard');
});
我遇到了同样的问题,我发现 App\Providers\NovaServiceProvider.php 中的门不让用户通过,只是 return 正确 仅在测试时 并且一切都必须按预期工作
protected function gate()
{
Gate::define('viewNova', function ($user) {
return true;
});
}
目前我正在尝试为 laravel nova 编写功能测试,断言页面已正确加载并且可以看到数据。
然而,当我编写测试时,由于 laravel nova 的数据生成方式,我找不到断言显示正确文本的方法。最重要的是,当加载不存在的资源页面时,我似乎无法测试页面是否正确加载 laravel nova 的 404 页面作为 200 响应返回。
有没有人找到一个好的方法来测试 nova?
在您的项目目录中添加 app/config 文件:
App\Providers\NovaServiceProvider::class,
TL;DR:查看此存储库:https://github.com/bradenkeith/testing-nova。它帮助我找到了测试 Laravel Nova 的方法。
Laravel Nova 基本上是一个 CRUD 框架。所以我假设,当你说
"that the page is loaded correctly and data can be seen"
您实际上是说:我的资源加载正确。或者,我可以 create/update/delete 一个资源。这是因为 Nova 正在通过 api 调用异步加载其资源信息。
所以这就是为什么测试逻辑 的一个好方法是测试 /nova-api/
路由 .
例如:
<?php
namespace Tests\Feature\Nova;
use App\Note;
use Tests\TestCase;
class NoteTest extends TestCase
{
public function setUp(): void
{
parent::setUp();
}
/** @test */
public function it_gets_a_note()
{
// given
$note = factory(Note::class)->create();
$response = $this->get('/nova-api/notes/' . $note->id)
->assertStatus(200)
->assertJson([
'resource' => [
'id' => [
'value' => $note->id
]
]
]);
}
}
通过调用路由 https://my-app.test/resources/notes/1
,我们可以断言我们收到了 200 响应(成功)并且我们实际上正在返回我们新创建的注释。这是一个非常值得信赖的测试,可以确保资源详细信息页面正常工作。
但是,如果您在谈论 浏览器测试,您可能想看看 Laravel Dusk:
Laravel Dusk provides an expressive, easy-to-use browser automation and testing API.
安装完成后,即可开始真实浏览器测试:
$user = factory(User::class)->create();
$user->assignRole('admin');
$this->browse(function (Browser $browser) use ($user) {
$browser
->loginAs($user)
->visit('/')
->assertSee('Dashboard');
});
我遇到了同样的问题,我发现 App\Providers\NovaServiceProvider.php 中的门不让用户通过,只是 return 正确 仅在测试时 并且一切都必须按预期工作
protected function gate()
{
Gate::define('viewNova', function ($user) {
return true;
});
}