首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >经济伪迁移

经济伪迁移
EN

Stack Overflow用户
提问于 2022-03-10 14:27:01
回答 2查看 158关注 0票数 1

伪造移民的最好方法是什么?我有一个大的数据库表,在那里我需要删除重复项,并在同一个事务中添加唯一的索引。这是解决这一问题的最安全和最简单的方法。但一旦完成,我的测试就开始失败。在迁移中没有提到唯一的索引。所以当我测试唯一的约束时,它就失败了。

我认为解决这个问题的最好方法是制造一个假迁移。不会做任何事情的迁移只会为测试添加唯一的索引。我可以删除唯一的测试,但我不喜欢这种方法。这也不能解决测试和生产数据库之间的不一致问题。

EN

回答 2

Stack Overflow用户

发布于 2022-03-10 21:33:57

您的索引设置为DEFERRABLE INITIALLY DEFERRED吗?

然后,您的测试将失败,因为它在沙箱(单个事务)中运行,因此不会触发违禁品。

你可以通过跑步来避开它

代码语言:javascript
复制
Repo.query!("SET CONSTRAINTS ALL IMMEDIATE", [])

在测试开始的时候。

票数 0
EN

Stack Overflow用户

发布于 2022-03-18 19:17:45

你不想做“假装”的移民。您的数据库结构应该在各种环境中都是统一的。如果您没有这种安全性,那么您的测试是不可靠的,弊大于利。

在不知道哪些测试实际上失败的情况下,很难说出确切的问题是什么,但您提到:

因此,当我测试唯一约束时,它就失败了。

对我来说,我认为这意味着测试套件没有相同的迁移头或一般的数据库结构,这两个数据库都应该读取相同的索引,并且您不希望在不同的环境之间改变结构。

我会删除测试数据库并创建/迁移数据结构。请记住,如果要这样做,则需要包装任何希望数据库中包含数据的迁移代码,如下所示:

代码语言:javascript
复制
unless Mix.env() in [:test] do
   # code expecting data to be in database
end

这样,您的测试套件将具有与其他环境相同的结构,并且您将不会遇到从空数据库获取数据的问题。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71425776

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档