当前,我正在尝试为laravel nova编写功能测试,以断言该页面已正确加载并且可以看到数据。
但是,当我编写测试时,由于产生laravel nova数据的方式,我无法找到断言显示正确文本的方法。除此之外,我似乎无法测试页面是否正确加载,而当不存在的资源页面加载时,laravel nova的404页面作为200响应返回。
有人找到测试新星的好方法吗?
TL; DR:签出此仓库:https://github.com/bradenkeith/testing-nova。它帮助我找到了如何测试Laravel Nova的方法。
Laravel Nova基本上是一个CRUD框架。所以我假设,当你说
“该页面已正确加载并且可以看到数据”
您实际上是指:我的资源已正确加载。或者,我可以创建/更新/删除资源。这是因为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响应(成功),并且实际上是在返回新创建的Note。这是一个非常值得信赖的测试,可以确保资源详细信息页面正常运行。
但是,如果您正在谈论浏览器测试,则可能需要查看Laravel Dusk:
Laravel Dusk提供了一个易于使用的表达性浏览器自动化和测试API。
一旦安装,您就可以开始真正的浏览器测试:
$user = factory(User::class)->create();
$user->assignRole('admin');
$this->browse(function (Browser $browser) use ($user) {
$browser
->loginAs($user)
->visit('/')
->assertSee('Dashboard');
});
在项目目录中的app / config文件中添加:
App\Providers\NovaServiceProvider::class,