0

rspec (v2.8) の should_receive() と混乱しています

私の理解では、 stub() と同じようにメソッドをスタブ化し、このスタブ化されたメソッドが呼び出されるという期待を設定します。

ただし、それを使用してパーシャル ビューから呼び出されるヘルパー メソッドをスタブ化しようとすると、エラーが発生し続けました。

Failure/Error: render 'invitations/header'
 ActionView::Template::Error:
   undefined method `require_javascript' for #<#<Class:0x7fe21d03d9f8>:0x7fe21cfd0c40>

最後に、テストを成功させるために、stub() メソッドも追加する必要がありました。このコードを以下に示します。before ブロックを削除すると、上記のエラーが発生します。

describe 'invitation/header' do

  before do
    view.stub(:require_javascript)  # Why is this required ?!
  end                                                           

  it "should initialize the expandable section javascript" do
    view.should_receive(:require_javascript).with('expandable_section')
    render 'invitations/header'
  end

  ...
end

このファイルには他にも多くのテストがありますが、成功するために stub() メソッドを必要とするものはありません。なぜこの状況でそれが必要なのか混乱していますか?

4

1 に答える 1

0

そのスタブを削除すると、それが期待されているため、テストは失敗しますview.should_receive(:require_javascript).with('expandable_section')

スタブとは、基本的にメソッド呼び出しをゴースト化していることを意味します。ビューをrender表示すると、「スタブ」は、そのメソッドが実際に何かを返すかのように機能します。

ここで詳細を読むことができます: https://relishapp.com/rspec/rspec-mocks/v/2-4/docs/method-stubs

于 2016-02-11T19:31:01.007 に答える