我不太清楚为什么,但是我的Sinatra rspec测试在他们应该的时候没有正确地失败。这是我的Rspec的一部分:
context "invalid params" do
before do
@params = {}
end
it "does not call the Count model" do
Count.should_not_receive(:increment)
post '/counts' , @params
end
end
虽然没有失败。但是,如果我将should_not_receive行切换为:
Count.should_receive(:increment).exactly(2).times
它响应以下错误:
Failure/Error: Count.should_receive(:increment).exactly(2).times
(<Count (class)>).increment(any args)
expected: 2 times
received: 1 time
那么为什么第一次测试如果被调用一次就不会失败?
答案 0 :(得分:0)
在执行put last_response.body和last_response.status之后,事实证明Sinatra正在提出异常并返回500状态。
进一步调试之后的原因是Rack环境设置为开发而不是测试。 Sinatra的文档说你应该能够
set :environment, :test
位于spec文件的顶部,但实际上不起作用。解决方案是在开始需要任何文件之前在spec文件的最开头添加以下行:
ENV['RACK_ENV'] = 'test'
就是这样!