Ruby 未达到RSpec消息期望值
我有以下代码:Ruby 未达到RSpec消息期望值,ruby,rspec,Ruby,Rspec,我有以下代码: require_relative '../spec_helper' describe PaymentProcessor do before(:each) do @processor = PaymentProcessor.new end describe '#process' do context 'payment accepted, sha digest valid' do it 'should return true and have
require_relative '../spec_helper'
describe PaymentProcessor do
before(:each) do
@processor = PaymentProcessor.new
end
describe '#process' do
context 'payment accepted, sha digest valid' do
it 'should return true and have no errors' do
GamePlayResult.stub(:new).and_return(mock('GamePlayResult'))
ticket = stub_model(Ticket, player: stub_model(Player, has_funds?: true))
Ticket.stub(:find).and_return ticket
game = stub_model(Game, play: ticket, tolerance: 10)
query = 'orderID=1060&STATUS=5&PAYID=17314217&NCERROR=0&SHASIGN=E969563B64ED6F93F5DC47A86B1B04DFC884B4A7'
@processor.process(query, game).should_not be_false
game.should_receive(:play)
@processor.error.should equal nil
end
end
end
end
除了game.should_receive(:play)
之外的所有断言都得到满足。然而,我知道正在调用:play
,因为a)如果不是,其他断言将失败;b)如果我不存根它,我将收到一个意外的消息错误
提前感谢。这里很难看到实际调用了什么代码,但从那里的内容判断,我假设是这一行:
@processor.process(query, game).should_not be_false
如果是这样的话,那么问题是您的期望是在您运行代码之后出现的,这是行不通的。移动游戏。应在@处理器上方的行上接收(:play)
行。进程(查询,游戏)
行应通过:
it 'should return true and have no errors' do
GamePlayResult.stub(:new).and_return(mock('GamePlayResult'))
ticket = stub_model(Ticket, player: stub_model(Player, has_funds?: true))
Ticket.stub(:find).and_return ticket
game = stub_model(Game, play: ticket, tolerance: 10)
query = 'orderID=1060&STATUS=5&PAYID=17314217&NCERROR=0&SHASIGN=E969563B64ED6F93F5DC47A86B1B04DFC884B4A7'
game.should_receive(:play)
@processor.process(query, game).should_not be_false
@processor.error.should equal nil
end
在调用将执行该期望的代码之前,必须设置RSpec期望值
因此:
@processor.process(query, game).should_not be_false
game.should_receive(:play)
应改为:
game.should_receive(:play)
@processor.process(query, game).should_not be_false