对于Class方法,should_not_receive不会失败

时间:2012-12-22 00:19:30

标签: rspec sinatra

我不太清楚为什么,但是我的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

那么为什么第一次测试如果被调用一次就不会失败?

1 个答案:

答案 0 :(得分:0)

在执行put last_response.body和last_response.status之后,事实证明Sinatra正在提出异常并返回500状态。

进一步调试之后的原因是Rack环境设置为开发而不是测试。 Sinatra的文档说你应该能够

set :environment, :test 

位于spec文件的顶部,但实际上不起作用。解决方案是在开始需要任何文件之前在spec文件的最开头添加以下行:

ENV['RACK_ENV'] = 'test'

就是这样!