最近,我在一个凤凰应用程序中编写了一些Ecto迁移。
然而,我总是手动测试迁移。
随着我们的迁移变得越来越复杂,并且需要修改我们生活系统上的数据,我真的很想在部署它们之前编写自动化测试。
自动测试将需要:
我们使用的是ExUnit和ESpec,但我还没有找到一种在特定测试之前只应用一些迁移的方法。
有没有一种方法可以为Ecto迁移编写自动测试?
发布于 2019-10-03 08:04:23
这是可能的,只要一点手工工作。所有这些测试都应该有一个标记(例如@tag :migr),并且应该作为一个单独的测试通过
mix test --only migr详细信息。
标准测试应该通过
mix test --exclude migr后者可能被设置为默认配置,对于前者,我将创建mix别名。
然后您应该创建您自己的任务,类似于ecto.migrate。它将将所有迁移汇总到指定的迁移(这可能作为参数传递)并执行所需的测试。
Sidenote:测试迁移的必要性是代码设计的一个非常糟糕的标志。
发布于 2019-10-04 17:08:44
我建议不要在迁移中引入太多的逻辑。迁移应该改变数据层的结构,而不是数据本身。
解决问题的更直接方法是使用数据转换逻辑创建单独的模块,并为该模块编写测试。然后,您可以应用迁移并分别调用模块来应用转换。
此外,请记住,即使您决定将应用程序回滚到以前的版本,您的应用程序也应该工作。也就是说,如果要删除列,请先创建新列,然后传输数据,然后将应用程序切换为使用新列。在下一个部署中,您可以删除一个旧列。
您可以通过Mix.Task调用数据转换模块。
https://stackoverflow.com/questions/58203773
复制相似问题