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 に答える