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(不包括),以便它们进入一个类。或者,如果我使用的是活动模型,我可以使用包含的。。。