3

RSpec では、Rails ビュー仕様で次のビュー スタブを変換しようとしています。

view.stub(:current_page?).with(root_url).and_return(true)

新しい allow/expect 構文を使用するには、以下は機能しません。

allow(view).to receive(:current_page?).with(root_url).and_return(true)

ただし、これによりNoMethodErrorが返されます。

 NoMethodError:
   undefined method `allow' for #<RSpec::Core::ExampleGroup::Nested_1::Nested_2::Nested_1::Nested_2:0x007fc7ca971988>

RDoc は、allow が double または real オブジェクトを受け入れる必要があることを示しています。これはバグですか、それとも何か間違っていますか? どうもありがとう!

仕様のソースコードは次のとおりです。

require "spec_helper"

describe 'Navigation Bar' do

  # This needs to be kept synced up with the links in the navigation bar
  KNOWN_LINKS = [:deal_gallery, :list, :login, :logout, :edit_account, :signup,
                 :categories]

  shared_examples "Navigation Bar Link Context" do |params|

    expected_links = params[:expected_links]

    context 'Outside Deal Gallery' do

      before(:each) { render partial: "layouts/navigation", formats: [:html] }

      it_has_only_links_with_ids
      it_has_only_known_links KNOWN_LINKS
      it_has_links expected_links
      it_does_not_have_links KNOWN_LINKS - expected_links

    end

    context 'On Deal Gallery' do

      before(:each) do
        # view.stub(:current_page?).with(root_url).and_return(true)
        allow(view).to receive(:current_page?).with(root_url).and_return(true)
        render partial: "layouts/navigation", formats: [:html]
      end

      it_has_only_links_with_ids
      it_has_only_known_links KNOWN_LINKS
      it_has_link :categories
      it_does_not_have_link :deal_gallery
    end

  end

  context 'For Anonymous User' do

    it_behaves_like "Navigation Bar Link Context",
      expected_links: [:deal_gallery, :login, :signup]

  end

  context 'For Authenticated User' do

    login_user

    it_behaves_like "Navigation Bar Link Context",
      expected_links: [:deal_gallery, :list, :logout, :edit_account]

  end

end
4

0 に答える 0