Я хотел бы проверить, как функция что-то изменяет в базе данных. Я борюсь с эквивалентом ExUnit следующего тестового примера ActiveSupport::TestCase
:
test "creates a database record" do
post = Post.create title: "See the difference"
assert_difference "Post.published.count" do
post.publish!
end
end
Версия RSpec более элегантна, и из-за использования в ней лямбда-выражений я подумал, что ее можно перенести на Elixir/ExUnit.
it "create a database record" do
post = Post.create title: "See the difference"
expect { post.publish! }.to change { Post.count }.by 1
end
Есть ли более элегантный (читай: функциональный) способ сделать это, чем этот:
test "creates a database record", %{conn: conn} do
records_before = count_records
post(conn, "/articles")
records_after = count_records
assert records_before == (records_after - 1)
end
defp count_records do
MyApp.Repo.one((from a in MyApp.Article, select: count("*"))
end
change
(читай «обнаружение мутации объекта») звучит немного странно для меня :) Там нет состояния, все объекты неизменяемы, поэтому наиболее функциональным будет тот способ, который вы предложили. - person Aleksei Matiushkin   schedule 28.09.2016