如何解决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 举报,一经查实,本站将立刻删除。