Build a Laravel App with TDD - Episode 4, InvalidArgumentException: Unable to locate factory with na
Posted
技术标签:
【中文标题】Build a Laravel App with TDD - Episode 4, InvalidArgumentException: Unable to locate factory with name [default] [App\\Project]【英文标题】:Build a Laravel App With TDD - Episode 4, InvalidArgumentException: Unable to locate factory with name [default] [App\Project]Build a Laravel App with TDD - Episode 4, InvalidArgumentException: Unable to locate factory with name [default] [App\Project] 【发布时间】:2020-04-22 03:15:10 【问题描述】:我在这里很深,有人可以帮忙吗? 我正在逐行遵循教程,并且已经达到了这一集中的单元测试: https://laracasts.com/series/build-a-laravel-app-with-tdd/episodes/4
我得到错误:
1) 测试\Unit\ProjectTest::test_it_has_a_path InvalidArgumentException: 无法找到名称为 [default] [App\Project] 的工厂。
一些信息:
单元测试是视频中的第二个测试(开始@4:18),我的 代码适用于第一个(功能)测试和工厂 函数在修补程序中运行良好。 我已经为“App\Project”尝试了各种不同的文件路径,并且 还尝试了静态 Project::class 类型引用。 我的 phpunit 没有运行测试,除非我加上前缀 'test',甚至 过滤到确切的测试名称时,所以我相信这可能是由于 到底层 phpunit 版本差异。我的单元测试:
namespace Tests\Unit;
use Illuminate\Foundation\Testing\RefreshDatabase;
use PHPUnit\Framework\TestCase;
class ProjectTest extends TestCase
use RefreshDatabase;
public function test_it_has_a_path()
$project = factory('App\Project')->create();
$this->assertEquals('/project/' . $project->id, $this->path());
我的项目工厂
/** @var \Illuminate\Database\Eloquent\Factory $factory */
use App\Project;
use Faker\Generator as Faker;
$factory->define(Project::class, function (Faker $faker)
return [
'title' => $faker->sentence,
'description' => $faker->sentence
];
);
我的表演方法
public function show(Project $project)
return view('projects.show', compact('project'));
我的路线
Route::get('projects/project', 'ProjectsController@show');
及工作特性测试(供参考)
public function test_a_user_can_view_a_project()
$this->withoutExceptionHandling();
$project = factory('App\Project')->create();
$this->get("/projects/" . $project->id)
->assertSee($project->title)
->assertSee($project->description);
【问题讨论】:
您是否尝试过将App\Project
导入您的测试然后调用$project = factory(Project::class)->create();
?
是的,我也试过了,似乎是 Laravel/PHPUnit 交互错误。请在下面从 Laracasts 中查看我的回答
【参考方案1】:
我在解决了我的问题的 Laracasts 论坛上得到了这个答案: 原因是单元测试现在扩展自 PHPUnit 测试用例类而不是框架测试用例..
所以你应该避免在单元测试中使用工厂。这是最近的变化..
为了能够继续使用工厂,你应该导入这个TestCase。
use Tests\TestCase;
然后删除这个:
use PHPUnit\Framework\TestCase;
这是变化:
https://github.com/laravel/framework/commit/e30a0c979d98f2f1f7b6c565e4002734237a280b
【讨论】:
感谢分享这个 - 我想知道如果工厂不应该在默认情况下进行测试,现在最好的做法是什么...... 我能听到 Jeffrey 在我的脑海中说,“老实说,我认为一些开发人员对此过于挑剔,在你的单元测试中包含工厂很好”以上是关于Build a Laravel App with TDD - Episode 4, InvalidArgumentException: Unable to locate factory with na的主要内容,如果未能解决你的问题,请参考以下文章
Laravel文档阅读笔记-How to Build a Rest API with Laravel: A Beginners Guide①
Microsoft Azure Tutorial: Build your first movie inventory web app with just a few lines of code(示例代
Laravel 4 migrate:rollback with --path on artisan CLI
Laravel 4 migrate:rollback with --path on artisan CLI
Laravel Multi BelongsTo RelationShip Merge with Eager Loading
Flutter:gradle build failed with error "A problem occurred evaluation root project 'android' &g