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