Почему эта спецификация описания RSpec показывает два разных результата в зависимости от метода?
Дано
context "stripe customer" do
subject { @customer = Stripe::Customer.retrieve @subscription.stripe_customer_token }
it "show me email" do
p @customer.email
p user.email
@customer.email.should == user.email
end
#its(:email) { should == user.email }
its(:description) { should == user.email }
end
в it
блок, это проходит. Закомментированная часть #its не проходит. Я получаю два разных объекта. expected: "daniel3@example.com"
got: "daniel133@example.com" (using ==)
Это связано с database_cleaner
драгоценный камень? Каким-то образом я не настраиваю фабрики /database_cleaner должным образом?
Почему он не совпадает в своем блоке, но совпадает в блоке it? Как это может быть иначе?
1 ответ
Вы используете subject
странным образом: вы используете его, чтобы установить переменную экземпляра, а не используете его как то, против чего строятся ожидания.
Блок, данный subject
оценивается лениво: оценивается только тогда, когда ваша спецификация использует тему. Для тебя its
Например, вызовы rspec subject
для вас, но для вашего другого примера вы никогда не звоните subject
, Итак @customer
используется, вероятно, похмелье из окружающего контекста