特性测试如何使用工厂数据?
How in feature testing use data from factory?
在带有测试的 laravel 5.8 应用程序中,我使用一些虚拟数据制作 posting 数据,例如:
$newVoteCategoryRow= [
'id' => null,
'name' => $new_vote_category_row_name,
'meta_description' => 'vote category meta_description on ' . now(),
'meta_keywords' => [ 'vote category meta_description on ' . now(), 'meta_keywords' ],
'active' => true,
'in_subscriptions' => true,
];
$response = $this->actingAs($loggedUser)->post('/admin/vote-categories', $newVoteCategoryRow);
$this->assertCount( $vote_categories_count+1, VoteCategory::all() );
它工作正常,但实际上我在 /database/factories/VoteCategoryFactory.php 中有 VoteCategory table 的工厂,定义为:
<?php
use Faker\Generator as Faker;
use \Cviebrock\EloquentSluggable\Services\SlugService;
use App\VoteCategory;
$factory->define(App\VoteCategory::class, function (Faker $faker) {
$name= 'Vote category ' . $faker->word;
$slug = SlugService::createSlug(VoteCategory::class, 'slug', $name);
return [
'name' => $name,
'slug' => $slug,
'active' => true,
'in_subscriptions' => false,
'meta_description' => $faker->text,
'meta_keywords' => $faker->words(4),
];
});
我的问题是,在 post 请求中是否有一种方法可以代替 $newVoteCategoryRow 数组使用我的工厂,而不是在数据库中添加行,而是
从 post 请求的工厂读取数据 ?
要实现这一点,您只需要在测试用例方法中使用您的工厂:
创建 VoteCategory
你必须使用方法,第一个是 make
,这个将创建 VoteCategory
的实例而不将其持久保存在数据库中,并且 create
方法将在数据库中保留新的 VoteCategory
。
在您的情况下,您想创建一个新实例而不将其添加到数据库中,为此您只需要使用 make
:
$newVoteCategoryRow = factory('App\VoteCategory')->make(); // add this line to your test case method.
$response = $this->actingAs($loggedUser)->post('/admin/vote-categories', $newVoteCategoryRow->toArray());
$this->assertCount( $vote_categories_count+1, VoteCategory::all());
更多信息,您可以查看文档Laravel 5.8: using-factories
在带有测试的 laravel 5.8 应用程序中,我使用一些虚拟数据制作 posting 数据,例如:
$newVoteCategoryRow= [
'id' => null,
'name' => $new_vote_category_row_name,
'meta_description' => 'vote category meta_description on ' . now(),
'meta_keywords' => [ 'vote category meta_description on ' . now(), 'meta_keywords' ],
'active' => true,
'in_subscriptions' => true,
];
$response = $this->actingAs($loggedUser)->post('/admin/vote-categories', $newVoteCategoryRow);
$this->assertCount( $vote_categories_count+1, VoteCategory::all() );
它工作正常,但实际上我在 /database/factories/VoteCategoryFactory.php 中有 VoteCategory table 的工厂,定义为:
<?php
use Faker\Generator as Faker;
use \Cviebrock\EloquentSluggable\Services\SlugService;
use App\VoteCategory;
$factory->define(App\VoteCategory::class, function (Faker $faker) {
$name= 'Vote category ' . $faker->word;
$slug = SlugService::createSlug(VoteCategory::class, 'slug', $name);
return [
'name' => $name,
'slug' => $slug,
'active' => true,
'in_subscriptions' => false,
'meta_description' => $faker->text,
'meta_keywords' => $faker->words(4),
];
});
我的问题是,在 post 请求中是否有一种方法可以代替 $newVoteCategoryRow 数组使用我的工厂,而不是在数据库中添加行,而是 从 post 请求的工厂读取数据 ?
要实现这一点,您只需要在测试用例方法中使用您的工厂:
创建 VoteCategory
你必须使用方法,第一个是 make
,这个将创建 VoteCategory
的实例而不将其持久保存在数据库中,并且 create
方法将在数据库中保留新的 VoteCategory
。
在您的情况下,您想创建一个新实例而不将其添加到数据库中,为此您只需要使用 make
:
$newVoteCategoryRow = factory('App\VoteCategory')->make(); // add this line to your test case method.
$response = $this->actingAs($loggedUser)->post('/admin/vote-categories', $newVoteCategoryRow->toArray());
$this->assertCount( $vote_categories_count+1, VoteCategory::all());
更多信息,您可以查看文档Laravel 5.8: using-factories