我有一个项目是在生产/暂存中使用 Postgres 开发的,在开发中使用 Sqlite 开发的。使用 Sqlite,我们能够在 13 秒内并行运行所有测试。
这是初始开发的一个很好的策略,但是有一些 Sqlite 不能做我们需要的事情(例如,删除列和添加新的外键)。所以我认为我们应该放弃 Sqlite 而只使用 Postgres。
测试套件运行大约需要一分钟,如果测试失败,我通常必须手动删除迁移表。它没有提供良好的测试体验。
对于使用 NodeJS、Knex 和 Jest 在 Postgres 数据库上并行运行测试,您有什么建议吗?
我做了一个依赖注入模块。它使用了我发现的带有默认参数的 hack。function (x = SomeDependency) {}. SomeDependency 没有定义,但我可以解析它的 toString(对于类构造函数、箭头函数和简洁的对象方法也是如此)。它并不意味着在浏览器中受支持,仅在 Node.js 中受支持。
我的问题:我找不到任何关于参数是否被懒惰评估的文档,是否存在任何规范/文档?或者这只是未定义的行为?
更新:
我正在做的是使用未定义的默认参数(如上例所示),并解析函数/类的 toString 以找出它们是什么,然后调用函数或使用注入的参数更新类。
我有一个 Laravel 工厂,看起来像这样:
$factory->define( Municipality::class, function ( Generator $faker ) {
return [
'name' => $faker->city,
'number' => (int) $faker->numerify( '####' )
];
} );
Run Code Online (Sandbox Code Playgroud)
如果我php artisan tinker像这样运行和使用工厂 factory(Acme\Models\Municipality::class)->create,我会得到输出
=> Acme\Models\Municipality {#797
name: "West Alysaland",
number: 0,
}
Run Code Online (Sandbox Code Playgroud)
当我跑步时,Acme\Models\Municipality::all()我得到
>>> Municipality::all();
=> Illuminate\Database\Eloquent\Collection {#771
all: [
Acme\Models\Municipality {#798
number: 9449,
name: "Lake Rosemarie",
},
],
}
Run Code Online (Sandbox Code Playgroud)
number在模型中设置为可填写,并且unsignedInteger在迁移中将字段设置为。
有谁知道为什么会发生这种情况?
编辑:
经过一些调试后,我发现这->save()是在模型上调用之后发生的。
ecmascript-6 ×1
eloquent ×1
javascript ×1
jestjs ×1
knex.js ×1
laravel ×1
node.js ×1
php ×1
postgresql ×1
testing ×1