Ruby on rails Rspec 3:can';不检查类类型
注意:Ruby on rails Rspec 3:can';不检查类类型,ruby-on-rails,ruby,rspec,rspec-rails,Ruby On Rails,Ruby,Rspec,Rspec Rails,注意: class BaseValidator; end class DefaultValidator < BaseValidator; end 给我打印这个: Failure/Error: it {is_expected.to be_a(DefaultValidator)} expected DefaultValidator to be a kind of DefaultValidator Failure/Error: it {is_expected.to be_kind_of
class BaseValidator; end
class DefaultValidator < BaseValidator; end
给我打印这个:
Failure/Error: it {is_expected.to be_a(DefaultValidator)}
expected DefaultValidator to be a kind of DefaultValidator
Failure/Error: it {is_expected.to be_kind_of(BaseValidator) }
expected DefaultValidator to be a kind of BaseValidator
然而,这是可行的:
...
it {is_expected.to be(DefaultValidator)}
it {is_expected.to be < (BaseValidator) }
...
现在,我在RSpec文档中找不到关于类类型机器的be()和be<的任何信息
我是否以错误的方式使用了“be_a”和“be_kind of”?您的验证程序方法正在返回类
和/或BaseValidator
。
换句话说,这些不是这些类的实例,但它们的类是class
be_a
和be_a_种类
用于断言对象是传递给它们的类或模块参数的实例
这就是为什么第一个代码示例失败,但第二个代码示例通过。第二个代码段是测试
Class
实例,而不是验证程序的实例。查看ValidatorFactory.validator的实现会有所帮助。有关失败的两个匹配器的文档,请参阅。@PeterAlfvin,添加了ValidatorFactory.validator的实现。
...
it {is_expected.to be(DefaultValidator)}
it {is_expected.to be < (BaseValidator) }
...
class ValidatorFactory
def self.validator(type)
case type.downcase
when 'default'
DefaultValidator
else
BaseValidator
end
end