4

我从 Webrat 迁移到 Capybara,现在我遇到了很多错误。例如在 webrat 我可以在集成测试中使用它:

response.should be_success

但水豚表明:

Failure/Error: response.should be_success
     NoMethodError:
       undefined method `success?' for nil:NilClass

有没有提供这种功能的方法?

UPD:我的规格:

require 'spec_helper'

describe "Admins" do
  before(:each) do
    @admin = FactoryGirl.create(:admin)

    visit '/'
    click_link "Login"
    fill_in "Email",  :with => @admin.email
    fill_in "Password", :with => 'qwerty'
    click_button "Sign in"
  end

  describe "Admin panel" do
    it "should have correct links" do
      click_link "User"
      response.should be_success
    end
  end
end
4

4 回答 4

15

您正在混合控制器和请求规格。

在控制器规范中检查response,在请求规范中检查page内容,因为您只能访问 html。

于 2012-09-15T09:54:26.030 回答
13

我找不到像success?方法这样的快捷方式的任何指示,但是如果您的驱动程序支持它,您可以执行以下操作:

visit(some_path)
page.status_code.should == 200

这是不久前添加的,但似乎没有很好的记录。此外,一些司机根本不向水豚提供信息。特别提到了 Selenium - 如果您在使用 Selenium 驱动程序时尝试这样做,它会崩溃。

于 2013-03-27T21:10:56.177 回答
1

这可能会帮助您:

expect(page).to have_http_status(200)
于 2016-11-30T11:42:06.257 回答
1

请利用asset_exists?下一个要点中的功能

def asset_exists?(src)
  js_script = <<JSS
  xhr = new XMLHttpRequest();
  xhr.open('GET', '#{src}', true);
  xhr.send();
  JSS

  page.execute_script(js_script)
  status = page.evaluate_script('xhr.status') # get js variable value
  status == 200 || status == 302
end

https://gist.github.com/yovasx2/1c767114f2e003474a546c89ab4f90db了解更多详情

于 2017-01-16T22:44:52.133 回答