在Cucumber / Capybara / Selenium中发现Ajax请求?

时间:2012-03-15 10:08:59

标签: ruby-on-rails-3 selenium tdd cucumber capybara

在我的Rails 3.2项目中,我偶尔会从Javascript向http://jsonip.com发送http请求。但是当使用@javascript标记运行Cucumber时,请求会非常频繁地发送。这显然是非常不受欢迎的,我想存根这样的请求。现在,我想我可以使用stub_request webmock来实现这一点,就像这样:

Before do
  stub_request(:any, /.*jsonip.*/).to_return(:body => '{"ip":"24.104.73.2","about":"/about"}')
end

但即使有了这个,{J}也会调用jsonip。所以我发现webmock实际上没有存根Ajax请求(至少没有上面的stub_request语句)。

在Cucumber / Capybara / Selenium设置中存根Ajax请求的正确方法是什么?

3 个答案:

答案 0 :(得分:4)

您可以将puffing-billy https://github.com/oesmith/puffing-billy用于此目的。我正在使用它在我的应用程序中模拟对Recurly的JSONP调用。

答案 1 :(得分:3)

执行此操作的唯一方法是根据运行的环境应用程序更改URL或禁用请求。

您无法从测试端存根此请求,因为此请求是由浏览器而非您的应用程序发出的。

此外,作为CI服务器的临时解决方案或解决方案,您可以在hosts文件中禁用此URL。

答案 2 :(得分:3)

Capybara不知道任何通过webmock存根的请求,因为请求来自capybara-webkit或firefox。

这篇思想机器文章将指导您完成它:
http://robots.thoughtbot.com/using-capybara-to-test-javascript-that-makes-http