0

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

所以我试图用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()实际上创建了多个区域。我在这里错过了什么吗?

先感谢您。

4

1 回答 1

1

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

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

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

于 2018-10-26T10:01:18.273 回答