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
只调用一次。
我有一个测试需要预先插入数据。
所以我正在尝试使用 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
只调用一次。