Я пытаюсь получить @user.stripe_customer_id
, чтобы вернуть строку. Если он не установлен, он должен запустить вызов внешней службы, установить ее и вернуть.Rails: как установить атрибут, просто вызвав его
Более пространно здесь мои тесты:
context 'Stripe ID' do
it 'should not be writable' do
expect { @user.stripe_customer_id = 'random_id_123123' }
.to raise_error(NoMethodError)
end
it 'should be generated if it does not exist' do
@user.save
expect(@user.stripe_customer_id).to include('cus')
end
end
где @user
является действующий User << ActiveRecord
экземпляр.
Rspec терпит неудачу со следующим:
Failed examples:
rspec ./spec/models/user_spec.rb:87 # User Stripe ID should be generated if it does not exist
И файл User.rb
имеет следующие строки:
def stripe_customer_id
if stripe_customer_id.blank?
stripe = Stripe::Customer.create(
description: "Username: #{username}",
email: email
)
self.stripe_customer_id = stripe.id
save!
end
stripe_customer_id
end
private
def stripe_customer_id=(new_customer_id)
write_attribute(:stripe_customer_id, new_customer_id)
end
Передано! Спасибо! – amingilani
Мне любопытно, однако, почему моя версия не работала? – amingilani
, вы определили метод 'stripe_customer_id =', который является методом setter, используется для установки значений и не получения их. :) – Alfie