【发布时间】:2019-04-07 15:17:37
【问题描述】:
我对 rspec 行为有疑问。我尝试为使用session 的服务编写测试,以读取一些值并覆盖该值。
例如我想测试什么
class CurrentCartService
attr_reader :user, :session
def initialize(user, session)
@user = user
@session = session
end
def cart_id
{ id: session[:cart_id] }
end
def assigne_cart_to_session
session[:cart_id] = current_cart.id
end
spec
describe CurrentCartService do
let(:current_user) { user }
let(:session) { double('session') }
let!(:cart) { create(:cart) }
subject { described_class.new current_user, session }
before do
allow(session).to receive(:[]).and_return(cart.id)
end
describe '#call' do
context 'when user is not signed' do
let(:user) { nil }
it { subject.call }
end
end
end
binding.pry
session[:cart_id]
=> 574
session[:cart_id] = 123
RSpec::Mocks::MockExpectationError: #<InstanceDouble(session) (anonymous)> received unexpected message :[]= with (:cart_id, 123)
如何解决这个问题?我试着写了一些expect
expect(session).to receive(:[])
但是不行,还是一样的错误
【问题讨论】:
标签: ruby-on-rails ruby rspec ruby-on-rails-5