gpt4 book ai didi

ruby-on-rails - 检查 RSpec 是否返回类引用?

转载 作者:行者123 更新时间:2023-12-02 00:55:08 25 4
gpt4 key购买 nike

假设我已经按照这些行定义了一个 Ruby 类:

class Blah
def self.ref_class
::Other::Thing
end
end

.ref_class 返回一个类引用(这就是它的名称,对吧?)。如何使用 RSpec 测试此方法?

最佳答案

例子

确保它是一个类

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

关于ruby-on-rails - 检查 RSpec 是否返回类引用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36274639/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com