ExUnit 使用 setup_all 块触发空错误

ExUnit triggers Empty Error with setup_all block

我有一个测试需要预先插入数据。

所以我正在尝试使用 setup_all 回调设置这些数据,因为这些数据可以设置一次。

因为我不想给上下文分配任何东西,所以我定义了 setup_all 如下

setup_all do
  create_languages() 
  create_regions()
  create_currencies() 
  create_user()
  :ok
end

并且每个测试都有一个函数,它从创建的数据中获取一个结构。

例如,其中一个测试如下:

test "update_core/2 (region_id) with valid data, updates core" do
  region = get_region()
  core = create_core()

  {:ok, core} = Cores.update_core(core, %{region_id: region.id})

  assert region.id == core.region_id
end

但是,region = get_region() 会触发空错误。为什么这个函数可以得到struct? IO.inspect 显示 create_regions() 实际上创建了多个区域。我在这里遗漏了什么吗?

提前谢谢你。

在您的 :test 环境中,Ecto 很有可能被配置为在沙盒模式下使用或设置为在每次测试后重置数据库。所以你应该使用 setup 块而不是 setup_all:

setup do
  create_languages() 
  create_regions()
  create_currencies() 
  create_user()
  :ok
end

setup块在每次测试之前调用,而setup_all只调用一次。