RSpec 助手参数问题

RSpec Helper Parameters Issue

我正在尝试测试以下代码:

module ApplicationHelper
  def current_book
    Book.find(params[:id])
  end
end

对 RSpec 使用以下测试:

RSpec.describe ApplicationHelper, :type => :helper do
  describe "#current_book" do
    book_1 = create(:book)

    params = {}
    params[:id] = book_1.id

    expect(helper.current_book).to eq(book_1)
  end
end

但由于某些原因,params[:id] 参数没有正确传递。有什么建议吗?

您需要存根参数:

RSpec.describe ApplicationHelper, type: :helper do
  describe "#current_book" do
    let(:first_book) { create(:book) }

    before(:all) { helper.stub!(:params).and_return(id: 1) }

    it "returns a book with a matching id" do
      expect(helper.current_book).to eq(first_book)
    end
  end
end

这是另一种存根参数的方法。我想这需要 rspec 3 不太记得了。

context 'path is a route method' do
  before { allow(helper).to receive(:params).and_return(order_by: { updated_at: :desc }) }
  subject { helper.sortable_link_to('Created At', order_by: :created_at) }
  it { is_expected.to match /comments/ }
  it { is_expected.to match /\?order_by/}
  it { is_expected.to match /\?order_by%5Bupdated_at%5D=asc/}
end