2016-12-23 3 views
0

나는 컨트롤러에서 비슷한 테스트를하고 테스트 블록에서는 setup_all 인서트를 사용할 수 있습니다. 여기에 내 모델에서 똑같은 것을 허용하려고 노력하고 있으며, 제대로 작동하지 않는 것처럼 보입니다. 내가 그것을 실행하면setup_all 블록의 데이터베이스에 삽입 된 개체가 테스트 블록에 나타나지 않는 이유는 무엇입니까?

defmodule Faq.QuestionTest do 
    use Faq.ModelCase 

    alias Faq.Question 

    setup_all do 
    :ok = Ecto.Adapters.SQL.Sandbox.checkout(Repo) 

    Question.changeset(%Question{}, %{question: "Unanswered", answer: nil})               |> Repo.insert! 
    Question.changeset(%Question{}, %{question: "Answered", answer: "My published answer", published_at: Ecto.DateTime.utc(:usec)}) |> Repo.insert! 

    published_count = Question |> Question.published |> Repo.all |> Enum.count 
    assert 1 == published_count 

    IO.puts "SETUP_ALL" 

    :ok 
    end 

    describe "scopes" do 
    test "answered", meta do 
     published_count = Question |> Question.published |> Repo.all |> Enum.count 
     assert 1 == published_count 
    end 
    end 
end 

나는 다음과 같은 오류가 있습니다 : 다음과 같이

나는 시험이 난에서와 내가 같은 검증을 setup_all 블록 이제

$ mix test test/models/question_test.exs 
warning: variable meta is unused 
    test/models/question_test.exs:21 

SETUP_ALL 


    1) test scopes answered (Faq.QuestionTest) 
    test/models/question_test.exs:21 
    Assertion with == failed 
    code: 1 == published_count 
    lhs: 1 
    rhs: 0 
    stacktrace: 
     test/models/question_test.exs:23: (test) 



Finished in 0.09 seconds 
1 test, 1 failure 

을 내 test 블록. 테스트에서 실패했지만 setup_all을 전달한 이유는 무엇입니까?

+1

'setup_all' 대신'setup'이 올바르게 작동합니까? – Dogbert

답변

0

따라서 ModelCase은 각 실행마다 setup_all의 첫 번째 줄을 다시 실행 중이므로 연결이 무효화됩니다. 이 줄 바로 : :ok = Ecto.Adapters.SQL.Sandbox.checkout(Repo)