在rails集成规范中向同一个控制器发出两个请求

Bru*_*oso 17 testing rspec ruby-on-rails

我在使用rspec在rails集成测试中向同一个url发出两个请求时遇到问题

it 'does something' do

  # get '/something', {:status=>'any_other'}, @header ## <<<<< this line couses problem!

  get '/something', {:status=>'ok'}, @header
  doc = Nokogiri::HTML(response.body)
  lis = doc.css('#the_id')
  lis.size.should == 1
  lis[0].text.should include('anything')
end
Run Code Online (Sandbox Code Playgroud)

如果我向同一个控制器发出两个请求,那么测试似乎保持旧响应......

在上面的示例中,如果我取消注释该行,则测试会中断,因为它会保留第一个"查询"的结果

它是测试堆栈的限制,还是我做错了什么?

Gau*_*ini 1

应该编写 Rails 集成测试,以便在案例中测试单个请求 - 响应周期。我们可以检查重定向。但如果你必须做类似的事情

获取 '/something', {:status=>'any_other'}, @header

获取 '/something', {:status=>'ok'}, @header

您应该为此编写两个不同的案例。

  • 如果 rspec 的设计者不希望您发出第二个请求,则第二个请求应该引发异常以阻止您这样做。这样它就会成为一个功能,而不是一个错误。知道他们为什么不这样做吗? (5认同)
  • 我发现这种范例不是最理想的,因为在某些情况下我想测试请求的幂等性。 (2认同)