0

デバイスを使用するようにサイトをアップグレードしており、テストする次の仕様がありますSitesController

describe SitesController do
  let(:user)  { FactoryGirl.create(:user)  }
  let(:admin) { FactoryGirl.create(:user, :admin) }

  shared_examples "disallow get index" do
    get :index
    response.should_not be_success
  end

  context "with user signed in" do
    before(:each) { sign_in user }

    it "disallowes / with GET" do
      get :index
      response.should_not be_success
    end

    it_behaves_like "disallow get index"
  end

  context "with admin signed in" do
    before(:each) { sign_in admin }

    it "allowes / with GET" do
      get :index
      response.should be_success
    end
  end
end

ユーザーがサインインしていないコンテキストを追加し、共有された例を使用して、サインインしてdisallow get indexいない場合は実行できないことを指定したいと思います。しかし、追加するit_behaves_like "disallow get index"と、この未定義のメソッド エラーが発生します。

sites_controller_spec.rb:8:in `block (2 levels) in <top (required)>': undefined method `get' for #<Class:0x00000101746718> (NoMethodError)

get :indexでは、共有サンプル グループではなく、明示的に呼び出すと、なぜこれが機能するのでしょうか。

4

1 に答える 1

0

非常に単純な修正であることが判明しました。私はこのようなブロックshared_examplesを置き換えるために使用していました:it

shared_examples "disallow get index" do
  get :index
  response.should_not be_success
end

本当にブロックshared_examplesの「置換」になるのはいつですか。したがって、あなたの中にブロックcontextが必要です:itshared_examples

shared_examples "disallow get index" do
  it "fails on index" do
    get :index
    response.should_not be_success
  end
end
于 2013-11-08T00:39:26.380 に答える