【问题标题】:Phoenix test data is persisting making the tests non-repeatablePhoenix 测试数据持续存在,使测试不可重复
【发布时间】:2017-01-18 04:23:46
【问题描述】:

请注意,这是my forum post 的副本。

我正在使用 Phoenix (1.2.1) 并且在我的测试环境中遇到了问题。问题是跨测试插入(更新、删除等)的数据被持久化在测试数据库中,使我的测试不可重复。

第一次运行:

root@d7594ec7baf0:/mnt/sidecar_api# mix test
................................
Finished in 2.2 seconds

32 tests, 0 failures

Randomized with seed 180820

第二次运行:

root@d7594ec7baf0:/mnt/sidecar_api# mix test
...........................

  1) test user signup with POST /v1/users with valid attributes   (SidecarApi.V1.UserControllerTest)
 test/controllers/v1/user_controller_test.exs:15
 Assertion with == failed
 code: response == expected
 lhs:  %{"jsonapi" => %{"version" => "1.0"}, "data" => %{"attributes" => %{"first-name" => "Juan", "last-name" => "Dela Cruz", "primary-email" => "jdelacruz@example.com", "primary-mobile-number" => "639123456789", "username" => "jdelacruz"}, "type" => "user", "id" => "2"}}
 rhs:  %{"jsonapi" => %{"version" => "1.0"}, "data" => %{"attributes" => %{"first-name" => "Juan", "last-name" => "Dela Cruz", "primary-email" => "jdelacruz@example.com", "primary-mobile-number" => "639123456789", "username" => "jdelacruz"}, "type" => "user", "id" => "1"}}
 stacktrace:
   test/controllers/v1/user_controller_test.exs:36: (test)

....

Finished in 2.3 seconds
32 tests, 1 failure

Randomized with seed 556822

在这些实例中唯一相关的信息是对象 ID。我正在检查插入的记录是否具有 ID 1,这是我在执行所有测试之前对数据库状态的假设。

这是我的test.exs

use Mix.Config

config :sidecar_api, SidecarApi.Endpoint,
  http: [port: 4001],
  server: false

config :logger, level: :warn

config :sidecar_api, SidecarApi.Repo,
  adapter: Ecto.Adapters.Postgres,
  username: "sidecar",
  password: "sidecardb",
  database: "sidecar_test",
  hostname: "sidecar-db-main",
  pool: Ecto.Adapters.SQL.Sandbox

test_helper.exs

ExUnit.start

Ecto.Adapters.SQL.Sandbox.mode(SidecarApi.Repo, :manual)

请注意,每次测试后,检查来自psql 本身的 postgres 内容反映的是空数据库。适用于开发和测试环境。现在,我很困惑在哪里看。

sidecar_dev=# select * from users;
 id | username | password | first_name | last_name | inserted_at |     updated_at
----+----------+----------+------------+-----------+-------------+------------
(0 rows)


sidecar_test=# select * from users;
 id | username | password | first_name | last_name | inserted_at | updated_at
----+----------+----------+------------+-----------+-------------+------------
(0 rows)

提前致谢!

【问题讨论】:

  • 您确定这不是因为您的测试每次都以不同的顺序运行吗?
  • 你能附上更重要的 sn-ps - 你的测试等。如果你为副作用函数运行测试,你记得不要异步使用它们吗?

标签: testing elixir phoenix-framework ecto


【解决方案1】:

看起来数据正在两次运行之间被清除,但您的 id 序列没有被重置。

code: response == expected
  lhs:  %{"jsonapi" => %{"version" => "1.0"}, "data" => %{"attributes" => %{"first-name" => "Juan", "last-name" => "Dela Cruz", "primary-email" => "jdelacruz@example.com", "primary-mobile-number" => "639123456789", "username" => "jdelacruz"}, "type" => "user", "id" => "2"}}
  rhs:  %{"jsonapi" => %{"version" => "1.0"}, "data" => %{"attributes" => %{"first-name" => "Juan", "last-name" => "Dela Cruz", "primary-email" => "jdelacruz@example.com", "primary-mobile-number" => "639123456789", "username" => "jdelacruz"}, "type" => "user", "id" => "1"}}

注意ID不同

【讨论】:

    猜你喜欢
    • 2022-01-19
    • 1970-01-01
    • 2011-07-11
    • 1970-01-01
    • 2020-09-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多