5

モジュールがあります:

module MyModule
  def do_something
    # ...
  end
end

次のようにクラスで使用されます。

class MyCommand
  extend MyModule

  def self.execute
    # ...
    do_something
  end
end

MyCommand.executeその呼び出しを確認するにはどうすればよいdo_somethingですか? モカで部分的なモッキングを試みましたが、呼び出されなくても失敗しませんdo_something:

it "calls do_something" do
  MyCommand.stubs(:do_something)
  MyCommand.execute
end
4

2 に答える 2

6

まあ、それは1つの解決策です。

この SO 投稿で述べたように、モック/スタブには 2 つの戦略があります。

1) mocha を使用expectsすると、テストの最後に自動アサートされます。あなたの場合、それをMyCommand.execute呼び出した後に呼び出されないとexpects、テストが失敗することを意味します。

2) これを行うためのより具体的/断定的な方法は、スタブとスパイの組み合わせを使用することです。スタブは、指定された動作で偽のオブジェクトを作成し、スパイ チェックを行って、誰かがメソッドを呼び出したかどうかを確認します。あなたの例を使用するには(これはRSpecであることに注意してください):

require 'mocha'
require 'bourne'

it 'calls :do_something when .execute is run' do
  AnotherClass.stubs(:do_something)

  MyCommand.execute

  expect(AnotherClass).to have_received(:do_something)
end

# my_command.rb
class MyCommand
  def self.execute
    AnotherClass.do_something
  end
end

したがって、このexpect行はbourne:do_somethingのマッチャーを使用して、MyCommand で呼び出されたかどうかを確認します。

于 2013-05-16T03:39:42.710 に答える