use*_*888 2 ruby rspec ruby-on-rails rspec-rails
假设我已经按照以下方式定义了 Ruby 类:
class Blah
def self.ref_class
::Other::Thing
end
end
Run Code Online (Sandbox Code Playgroud)
.ref_class返回一个类引用(这就是它的名字,对吧?)。如何使用 RSpec 测试此方法?
expect(Blah.ref_class.class).to eq(Class)
Run Code Online (Sandbox Code Playgroud)
expect(Blah.ref_class.ancestors).to include(SuperClass)
Run Code Online (Sandbox Code Playgroud)
使用阿马丹的答案。这是摘录。
expect(Blah.ref_class).to eq(::Other::Thing)
Run Code Online (Sandbox Code Playgroud)
expect(Blah.new).to be_an_instance_of(Blah)
Run Code Online (Sandbox Code Playgroud)
expect(Blah.new).to be_an(Object) # or one of `be_a` `be_a_kind_of`
Run Code Online (Sandbox Code Playgroud)
在 Ruby 中,类的类是 Class。
class Sample
end
Sample.class #=> Class
Sample.class.ancestors #=> [Class, Module, Object, Kernel, BasicObject]
Run Code Online (Sandbox Code Playgroud)
在 Ruby 中,扩展类和包含或前置的模块是祖先列表的一部分。
module IncludedModule
end
module PrependedModule
end
class Sample
include IncludedModule
prepend PrependedModule
end
Sample.ancestors #=> [PrependedModule, Sample, IncludedModule, Object, Kernel, BasicObject]
Run Code Online (Sandbox Code Playgroud)
在 Ruby 中,实例的类就是类。
Sample.new.class #=> Sample
Run Code Online (Sandbox Code Playgroud)
检查实例是否完全属于指定类。
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
Run Code Online (Sandbox Code Playgroud)
检查实例的类是否完全是指定的类或其子类之一。
Sample.new.kind_of? IncludedModule #=> true # Same as #is_a?
Sample.new.class.ancestors.include? IncludedModule #=> true
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1865 次 |
| 最近记录: |