2

如何测试我是否正确地与 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

混音:

module MatchMixin
  extend ActiveSupport::Concern

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

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

4

1 回答 1

1

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

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

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

这意味着规范代码本身只编写一次,但使用不同的输入。

it_behaves_like "a MatchMixin"
于 2012-06-15T01:22:44.600 回答