RSpec - использование лямбды - PullRequest
7 голосов
/ 23 июня 2011

Может кто-нибудь объяснить мне разницу между следующими методами?

it "should create a user" do
    lambda do
        post :create, :user => @attr
    end.should change(User, :count).by(1)
end

Это метод в его нынешнем виде.Может ли это быть достигнуто с помощью метода, приведенного ниже?

it "should create a user" do
    post :create, :user => @attr
    response.should change(User, :count).by(1)
end

Являются ли они фактически одинаковыми?Или второе не работает?Поскольку учебник, которому я следую, по-видимому, использует response всякий раз, когда это возможно, но не делал этого в вышеупомянутом случае.Может кто-нибудь объяснить, пожалуйста, разницу между двумя вышеупомянутыми методами, как работают лямбда-ответ и RSpec?Спасибо!

1 Ответ

10 голосов
/ 23 июня 2011

Лямбда-форма эквивалентна этому, если тестовая база данных пуста:

User.count.should == 0
post :create, :user => @attr
User.count.should == 1

Я полагаю, что вызов change без указания блока, как показано во втором примере, приведет к ошибке.

Лямбда-форма используется для переноса фрагмента кода, который можно использовать для установки ожидания более удобным способом, чем тестирование с условиями до и после. В более поздних версиях RSpec вы также увидите, что это сделано с expect:

expect {
  post :create, :user => @attr
}.to change(User, :count).by(1)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...