如何测试我是否正确连接了mixin?

时间:2012-06-14 23:52:50

标签: ruby rspec mixins

如何测试我是否正确连接了mixin?

我有一个mixin,它提供了与named_scope或protected_attribute类似的类方法。我已经广泛测试了mixin,现在需要测试它混合的模型是否正确使用它。我不想再次测试整个mixin,只是我用正确的args调用它。

模特:

class SomeClass
  include MatchMixin
  match :name
end

测试:

describe SomeClass do
  it { should be_kind_of(MatchMixin) }

  it "calls match with :name" do
    SomeClass.stubs(:match)
    SomeClass.new
    SomeClass.should have_received(:match).with(:name)  # <= this fails
  end
end

mixin:

module MatchMixin
  extend ActiveSupport::Concern

  module ClassMethods
    def match(arg)
      # lots of awesome code
    end
  end
end

我已经尝试了我能想到的一切。有什么建议吗?

1 个答案:

答案 0 :(得分:1)

我个人只是用你的第一个例子:

it "includes MatchMixin" do
  SomeClass.new.should be_a_kind_of(MatchMixin)
end

但是,如果你的mixin需要填写一些缺失的部分(即需要一些不知道如何实现的方法定义),那么你可以使用RSpec的shared examples

那意味着规范代码本身只写了一次,但是用不同的输入来运行。

it_behaves_like "a MatchMixin"