说我已经按照这些方式定义了一个Ruby类:
class Blah
def self.ref_class
::Other::Thing
end
end
.ref_class
返回一个类引用(这就是它所谓的,对吧?)。如何使用RSpec测试此方法?
答案 0 :(得分:1)
它只是一个正常的返回值,如"hello"
;但是班级Class
。所以只需检查函数是否返回它应该的值。在这种情况下,您expect(Greeting.in_morning).to eq "hello"
expect(Blah.ref_class).to eq ::Other::Thing
。
答案 1 :(得分:0)
expect(Blah.ref_class.class).to eq(Class)
expect(Blah.ref_class.ancestors).to include(SuperClass)
使用Amadan的答案。这是一个例外。
expect(Blah.ref_class).to eq(::Other::Thing)
expect(Blah.new).to be_an_instance_of(Blah)
expect(Blah.new).to be_an(Object) # or one of `be_a` `be_a_kind_of`
在Ruby中,类的类是Class。
class Sample
end
Sample.class #=> Class
Sample.class.ancestors #=> [Class, Module, Object, Kernel, BasicObject]
在Ruby中,扩展类和包含或前置的模块是祖先列表的一部分。
module IncludedModule
end
module PrependedModule
end
class Sample
include IncludedModule
prepend PrependedModule
end
Sample.ancestors #=> [PrependedModule, Sample, IncludedModule, Object, Kernel, BasicObject]
在Ruby中,实例的类是类。
Sample.new.class #=> Sample
检查实例是否完全是指定的类。
Sample.new.class == Sample #=> true # what be_an_instance_of checks.
Sample.new.instance_of? Sample #=> true
Sample.new.class == IncludedModule #=> false
Sample.new.instance_of? IncludedModule #=> false
检查实例的类是否是完全指定的类或其子类之一。
Sample.new.kind_of? IncludedModule #=> true # Same as #is_a?
Sample.new.class.ancestors.include? IncludedModule #=> true