dingllingham/nova-assertions

Nova API 测试请求与断言

1.2.0 2020-11-24 01:14 UTC

This package is auto-updated.

Last update: 2024-09-07 07:32:22 UTC


README

Latest Version on Github Total Downloads Twitter Follow

Nova 测试的请求与断言 - 查看示例

testing tdd laravel nova

断言: 策略 | 卡片 | 操作 | 过滤器 | 透镜 | 资源 | 字段 | 关系

安装

composer require dillingham/nova-assertions --dev

通过向测试添加 NovaAssertions 来启用

use NovaTesting\NovaAssertions;

class UserTest extends TestCase
{
    use NovaAssertions;
}

身份验证

登录一个有 权限访问 Nova 的用户

$this->be(factory(User::class)->create());

Nova 请求

使用资源的 uriKey 来执行断言进行请求

$response = $this->novaIndex('users');

$response = $this->novaDetail('users', $user->id);

$response = $this->novaCreate('users');

$response = $this->novaEdit('users', $user->id);

$response = $this->novaLens('users', Lens::class);

请求过滤器

您还可以将过滤器和它们的值传递给索引和透镜

$response = $this->novaIndex('users', [
    StatusFilter::class => 'active'
]);
$response = $this->novaLens('users', Lens::class, [
    StatusFilter::class => 'active'
]);

断言 HTTP

您可以像平常一样调用 HTTP 响应方法

$response->assertOk();

断言资源

$response->assertResourceCount(3);
$response->assertResources(function($resources) {
    return $resources->count() > 0;
});

断言卡片

$response->assertCardCount(5);
$response->assertCardsInclude(Card::class);
$response->assertCardsExclude(Card::class);
$response->assertCards(function($cards) {
    return $cards->count() > 0;
});

断言操作

$response->assertActionCount(5);
$response->assertActionsInclude(Action::class);
$response->assertActionsExclude(Action::class);
$response->assertActions(function($actions) {
    return $actions->count() > 0;
});

断言过滤器

$response->assertFilterCount(5);
$response->assertFiltersInclude(Filter::class);
$response->assertFiltersExclude(Filter::class);
$response->assertFilters(function($filters) {
    return $filters->count() > 0;
});

断言透镜

$response->assertLensCount(5);
$response->assertLensesInclude(Lens::class);
$response->assertLensesExclude(Lens::class);
$response->assertLenses(function($lenses) {
    return $lenses->count() > 0;
});

断言字段

$response->assertFieldCount(5);

断言特定字段存在

$response->assertFieldsInclude('id');

断言特定字段包含值

$response->assertFieldsInclude('id', $user->id);

断言多个字段存在

$response->assertFieldsInclude(['id', 'email']);

断言具有特定值的多个字段存在

$response->assertFieldsInclude(['id' => 1, 'email' => 'example']);

断言一个字段的多个值存在

$response->assertFieldsInclude('id', $users->pluck('id'));

针对一组字段进行断言

$response->assertFields(function($fields) {
    return $fields->count() > 0;
});

在这些场景中,exclude 也可以使用

$response->assertFieldsExclude(['id' => 1, 'email' => 'example']);

断言关系

// App\Nova\Post
// BelongsTo::make('Category'),
$response = $this->novaCreate('posts');

$response->assertRelation('categories', function($categories) {
    //
});
// App\Nova\Category
// HasMany::make('Posts'),
$response = $this->novaDetail('categories');

$response->assertRelation('posts', function($posts) {
    //
});

断言策略

断言 Nova 的策略使用 及认证用户

$response->assertCanView();

$response->assertCanCreate();

$response->assertCanUpdate();

$response->assertCanDelete();

$response->assertCanForceDelete();

$response->assertCanRestore();

也可以对每个断言使用 cannot

$response->assertCannotView();

作者

嗨 👋,我是 Brian Dillingham,这是 Nova 包的创建者 以及其他一些包

希望您觉得它有用。请随时提供反馈。

在推特上关注我: @im_brian_d