我试图测试一个在Postgres中创建的视图,但是它返回了一个空的结果集。然而,当在Elixir交互式环境中测试该视图时,我得到了预期的数据。下面是我创建和测试该视图所采取的步骤:
1.创建迁移:
def up do
execute """
CREATE VIEW example_view AS
...
1.创建架构:
import Ecto.Changeset
schema "test_view" do
field(:user_id, :string)
1.测试项目:
describe "example loads" do
setup [
:with_example_data
]
test "view" do
query = from(ev in Schema.ExampleView)
IO.inspect Repo.all(query)
end
end
返回的响应是空数组[]
是否缺少允许在测试中测试视图的设置?
1条答案
按热度按时间rxztt3cl1#
正如其中一条评论所指出的:
mix phx.server
...在:dev
环境和开发数据库上运行:test
环境并在单独的DB上运行这实际上非常有意义,因为您希望您的测试套件是可重复的,并且独立于您可能在开发环境中创建/编辑的任何记录。
您可以在
:test
环境中打开iex,以确认您的查询也在此处返回空数组:您需要在查询之前用一些已知的记录填充测试数据库。至少有两种方法可以实现这一点:固定装置和种子。
1.固定装置:
test/support/test_helpers.ex
中创建记录(通常为:获取一些attrs
,添加一些默认值并从上下文中调用一些create_
函数)setup
函数或测试用例中调用它们DataCase
,每个测试都被 Package 在它自己的事务中,并且您创建的任何fixture都将在测试结束时被回滚,因此测试彼此隔离和独立。1.种子:
priv/repo/seeds.exs
中定义一些种子。Repo.insert!/1
)mix ecto.setup
或mix ecto.reset
时,mix都会运行这些种子(无论使用什么环境)seeds.exs
中应用任何更改,可以运行以下命令:dev_seeds.exs
)并修改您的mix.exs
以配置ecto.setup
。我通常会混合使用这两种方法。