Понимание assert_difference в Ruby on Rails - PullRequest
14 голосов
/ 28 июля 2010

Может кто-нибудь объяснить, что делает этот тестовый код? :

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

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

Спасибо!

Ответы [ 4 ]

29 голосов
/ 28 июля 2010

assert_difference проверяет, что результат вычисления его первого аргумента (String, который может быть передан 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
6 голосов
/ 28 июля 2010

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

1 голос
/ 09 мая 2014

Это утверждение предназначено для проверки определенной / указанной разницы в первом аргументе.1-й аргумент должен быть строкой, т. Е. «Post.count».Второй аргумент имеет значение по умолчанию 1, вы можете указать и другие числа, даже отрицательные числа.для более подробной информации посетите: http://api.rubyonrails.org/classes/ActiveSupport/Testing/Assertions.html

0 голосов
/ 31 мая 2017

Этот метод предназначен для проверки того, что существует числовая разница между первым аргументом и вторым аргументом. В большинстве случаев первый аргумент - это строка, похожая на “Post.count”, а второй аргумент - блок. В рельсах это главным образом используется в функциональном тестировании, чтобы проверить, может ли объект быть сохранен в базе данных. Логика заключается в том, что перед сохранением нового объекта число записей в этой конкретной таблице должно отличаться от количества записей после сохранения объекта (от 1 до точного значения).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...