2017-01-15 4 views
0

my forum post입니다.Phoenix 테스트 데이터가 지속되어 테스트를 반복 불가능하게 만듭니다.

필자는 Phoenix (1.2.1)를 사용하고 있으며 테스트 환경에 문제가 있습니다. 문제는 테스트 전반에 삽입 (업데이트, 삭제 등)되는 데이터가 테스트 데이터베이스에 유지되어 내 테스트가 반복 불가능하다는 것입니다.

처음 실행 :

[email protected]:/mnt/sidecar_api# mix test 
................................ 
Finished in 2.2 seconds 

32 tests, 0 failures 

Randomized with seed 180820 

두 번째 실행 :이 경우에

[email protected]:/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" => "[email protected]", "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" => "[email protected]", "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 내 모든 테스트를 실행하기 전에 DB 상태에 대한 내 가정입니다 확인하고 있어요. 각 테스트 후, psql에서 포스트 그레스의 내용을 확인 자체가 빈 데이터베이스를 반영하는 것을

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) 

참고 :

여기 내 test.exs입니다. 개발 및 테스트 환경 모두. 바로 지금, 나는 어디를보아야하는지 혼란스러워합니다.

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) 

미리 감사드립니다.

+0

당신이 당신의 검사 결과가 다른 순서로 때마다 실행되기 때문에이 아니라고 확신이 있습니까? –

+0

더 중요한 스 니펫 (테스트 등)을 첨부 할 수 있습니까? 부작용 기능에 대한 테스트를 실행하는 경우 비동기 적으로 사용하지 않는 것을 기억합니까? – PatNowak

답변

0

실행 중에 데이터가 삭제되는 것처럼 보이지만 ID 시퀀스가 ​​재설정되지 않는 것 같습니다. ID가 다른 것을

code: response == expected 
    lhs: %{"jsonapi" => %{"version" => "1.0"}, "data" => %{"attributes" => %{"first-name" => "Juan", "last-name" => "Dela Cruz", "primary-email" => "[email protected]", "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" => "[email protected]", "primary-mobile-number" => "639123456789", "username" => "jdelacruz"}, "type" => "user", "id" => "1"}}