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

如何测试经济迁移
EN

Stack Overflow用户
提问于 2019-10-02 14:36:52
回答 2查看 1.3K关注 0票数 2

最近,我在一个凤凰应用程序中编写了一些Ecto迁移。

然而,我总是手动测试迁移。

随着我们的迁移变得越来越复杂,并且需要修改我们生活系统上的数据,我真的很想在部署它们之前编写自动化测试。

自动测试将需要:

  1. 将数据库重置到迁移之前的某个点。
  2. 运行比要测试的迁移更早的迁移
  3. 准备数据并将其插入数据库
  4. 运行迁移
  5. 验证结果与预期相符
  6. 清理数据库,以确保即将进行的测试不会与数据冲突

我们使用的是ExUnit和ESpec,但我还没有找到一种在特定测试之前只应用一些迁移的方法。

有没有一种方法可以为Ecto迁移编写自动测试?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-10-03 08:04:23

这是可能的,只要一点手工工作。所有这些测试都应该有一个标记(例如@tag :migr),并且应该作为一个单独的测试通过

代码语言:javascript
复制
mix test --only migr

详细信息

标准测试应该通过

代码语言:javascript
复制
mix test --exclude migr

后者可能被设置为默认配置,对于前者,我将创建mix别名。

然后您应该创建您自己的任务,类似于ecto.migrate。它将将所有迁移汇总到指定的迁移(这可能作为参数传递)并执行所需的测试。

Sidenote:测试迁移的必要性是代码设计的一个非常糟糕的标志。

票数 3
EN

Stack Overflow用户

发布于 2019-10-04 17:08:44

我建议不要在迁移中引入太多的逻辑。迁移应该改变数据层的结构,而不是数据本身。

解决问题的更直接方法是使用数据转换逻辑创建单独的模块,并为该模块编写测试。然后,您可以应用迁移并分别调用模块来应用转换。

此外,请记住,即使您决定将应用程序回滚到以前的版本,您的应用程序也应该工作。也就是说,如果要删除列,请先创建新列,然后传输数据,然后将应用程序切换为使用新列。在下一个部署中,您可以删除一个旧列。

您可以通过Mix.Task调用数据转换模块。

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

https://stackoverflow.com/questions/58203773

复制
相关文章

相似问题

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