Понимание assert_difference в Ruby on Rails

Кто-либо мог объяснить, что делает этот тестовый код?:

assert_difference('Post.count') do
    post :create, :post => { :title => 'Hi', :body => 'This is my first post.'}
end

и:

assert_difference 'ActionMailer::Base.deliveries.size', +1 do
  post :invite_friend, :email => 'friend@example.com'
end

Я не могу понять это даже при том, что я прочитал документацию.

Спасибо!

14
задан James Martinez 30 October 2018 в 10:27
поделиться

2 ответа

assert_difference проверяет, что результат вычисления его первого аргумента (строка, которая может быть передана в eval ) изменяется на определенную величину после вызова переданного блока. Первый пример выше может быть «развернут» до:

before = Post.count # technically, eval("Post.count")
post :create, :post => { :title => 'Hi', :body => 'This is my first post.'}
after = Post.count
assert_equal after, before + 1
29
ответ дан 1 December 2019 в 07:27
поделиться

Это просто проверка того, что количество объектов любого указанного типа увеличилось на 1. (Это простой способ проверить, что объект был добавлен в БД)

6
ответ дан 1 December 2019 в 07:27
поделиться
Другие вопросы по тегам:

Похожие вопросы: