Почему эта спецификация описания 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 используется, вероятно, похмелье из окружающего контекста

Другие вопросы по тегам