Class 使用RSpec 3测试模块

Class 使用RSpec 3测试模块,class,testing,methods,rspec,module,Class,Testing,Methods,Rspec,Module,我正在努力测试模块的def self.method。我发现了一条很棒的线。我的代码是: module MyModule def self.method groups = Posts.group :name end end describe Class.new { include MyModule } do its (:method) { should be_a(ActiveRecord::Relation) } end 问题是,问题是关于包括一个模块,而不扩展它。正如答案

我正在努力测试模块的
def self.method
。我发现了一条很棒的线。我的代码是:

module MyModule
  def self.method
    groups = Posts.group :name
  end
end

describe Class.new { include MyModule } do
  its (:method) { should be_a(ActiveRecord::Relation) }
end
问题是,问题是关于包括一个模块,而不扩展它。正如答案的作者所提到的,他用rspec2测试了它。我用rspec3.0.0对它进行了测试,唯一有效的方法是当该方法是一个实例的方法时。否则,我将得到以下错误:

undefined method `method' for #<#<Class:0x0000000..>:0x00000006..>
未定义的方法“method”#

如何测试
MyModule.method

它可能会混淆实例级和类级方法。 尝试此方法以确保它确实在类级方法上进行测试

class MyClass
  include MyModule
end
it "should have an active relation on method" do
  expect(MyClass.method).to be_a(ActiveRecord::Relation)
end

通过这种精确的设置,我得到了DummyClass:Class的未定义方法“method”:-/对,所以你的include没有做你认为它在做的事情。。。这意味着,也许
包含
不是你想要的。你是对的。我正在投票,谢谢。我想我的问题令人困惑。但是你怎么测试一个模块的self方法呢?模块的问题是它们对类方法的评估方式不同。。。我通常会对类方法使用extend(不包括),以便它们进入一个类。或者,如果我使用的是活动模型,我可以使用包含的
。。。