Почему объекты, вставленные в базу данных в блоке 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

Когда я запускаю его, у меня появляется следующая ошибка:

$ 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

Сейчас в setup_all блок я делаю ту же проверку, что и в моем test блок. Почему бы не пройти тест, но пройти в setup_all?

1 ответ

Вот и получается, что ModelCase бегал первую строчку setup_all снова при каждом запуске, таким образом, аннулирует мое соединение. Эта строка прямо здесь: :ok = Ecto.Adapters.SQL.Sandbox.checkout(Repo)

Другие вопросы по тегам