11

プロジェクト内で自作モジュールのモジュール機能をモックするにはどうすればよいですか?

与えられたモジュールと機能

module ModuleA::ModuleB
  def self.my_function( arg )
  end
end

のように呼ばれます

ModuleA::ModuleB::my_function( with_args )

スペックを書いている関数内で使用する場合、どのようにモックする必要がありますか?


obj = double("ModuleA::ModuleB")関数がオブジェクトではなくモジュールで呼び出されるので、それを2倍にする( )は私には意味がありません。

スタブしてみました(ModuleA::ModuleB.stub(:my_function).with(arg).and_return(something))。明らかに、それは機能しませんでした。stubそこには定義されていません。

それから私はそれをで試しましたshould_receive。再びNoMethodError

モジュールとその機能をモックするための好ましい方法は何ですか?

4

2 に答える 2

11

あなたがあなたの質問で説明するモジュールを考えると

module ModuleA ; end

module ModuleA::ModuleB
  def self.my_function( arg )
  end
end

モジュール関数を呼び出すテスト対象の関数

def foo(arg)
  ModuleA::ModuleB.my_function(arg)
end

次に、次のようにそのfoo呼び出しをテストできます。myfunction

describe :foo do
  it "should delegate to myfunction" do
    arg = mock 'arg'
    result = mock 'result'
    ModuleA::ModuleB.should_receive(:my_function).with(arg).and_return(result)
    foo(arg).should == result
  end
end
于 2012-07-06T00:49:08.237 に答える
1

rspec 3.6については、RSpecの期待構文でクラスメソッドをモックする方法を参照してください。

リンクのみの回答を避けるために、AndreyDeinekoによる回答のコピーを次に示します。

allow(Module)
  .to receive(:profile)
  .with("token")
  .and_return({"name" => "Hello", "id" => "14314141", "email" => "hello@me.com"})
于 2017-06-06T10:12:21.137 に答える