微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Ecto沙箱:仅在单元测试中出现foreign_key_constraint错误

如何解决Ecto沙箱:仅在单元测试中出现foreign_key_constraint错误

我是Elixir的新手,所以我很难确定这一点。如果您想查看其他文件,请告诉我-我不知道重要的内容或不包含的文件

我有一个“帐户”对象,其中有许多“用户”对象。我正在尝试使用Ecto.Changset.cast_assoc用关联的帐户更新用户。从iEx可以正常运行,但是在单元测试中,我得到了:

(Ecto.ConstraintError) constraint error when attempting to update struct:
* users_account_id_fkey (foreign_key_constraint)

现在,我知道这与Ecto沙箱有关,但是我不知道如何编写测试以使其起作用。我可以继续前进,而不要编写此测试,但我想了解如何使其在将来发挥作用。

在我的项目中,我有一个看起来像这样的Test Helper(只需设置第三方应用程序):

ExUnit.start()

{:ok,_} = Application.ensure_all_started(:wallaby)
{:ok,_} = Application.ensure_all_started(:ex_machina)
Faker.start()

Application.put_env(:wallaby,:base_url,BondiWeb.Endpoint.url())

我也有标准的channel_case,conn_case,data_case,但我没有更改它们。最后,我的test.exs指向沙盒适配器:

pool: Ecto.Adapters.sql.SandBox

我已经尝试了不同沙箱模式的几种变体(:auto,:manual,:shared),但似乎无法弄清楚如何设置此测试,以便可以插入两条记录并通过测试。 / p>

我怀疑这与我使用ExMachina来管理我的固定装置有关,并且我“做错了”。但是我也尝试不使用ExMachina来直接创建用户,这似乎也不起作用。

我该如何编写一个测试,以将多个关联的保存保存到沙箱中,并保留到测试结束?

解决方法

感谢所有发表评论的人。似乎确实与未删除/重新创建测试数据库有关。我发誓我做到了,但是我想没有!

我做了记录:

MIX_ENV=test mix ecto.reset

重新运行测试,它就可以了。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。