Silverstripe 单元测试修改实时数据库(postgres 模块)

Silverstripe Unit Tests modify live database (postgres module)

我有一个版本为 3.1.12 并使用 postgres 模块版本 0.92 的站点。

我刚刚将所有内容分别升级到 3.5.3 和 1.2。除了我现有的和未更改的单元测试中的一些奇怪行为外,一切都很好。似乎在测试以编程方式创建对象时发生,如下所示:

$page=new Page();
$page->Title='Read only success';
$page->write();

在 3.1 和 0.92 上,测试会 运行 然后 return 成功。在 tmp 数据库中完成上述工作。

升级后同样测试,没有任何修改,运行s和returns成功。只有这一次,工作是在当前实时数据库中完成的。在上述情况下,我的管理站点树中有一个新的草稿页面。

有人以前看过这个吗?我已经竭尽全力寻找答案和追踪到底是什么导致了这种非常危险的行为。

如果您不使用夹具文件进行测试,您需要确保告诉 SapphireTest 使用测试数据库:

protected $usesDatabase = true;

否则创建这样的数据对象将直接写入您的主数据库。

如果您使用的是夹具文件,则无论如何都暗示了这一点,所以只有在您不使用时才有必要。

Here's the doc block, for reference.