Rspec 3:无法检查类类型

时间:2014-11-17 16:14:50

标签: ruby-on-rails ruby rspec rspec-rails

观察:

class BaseValidator; end
class DefaultValidator < BaseValidator; end

Rspec 3.1:

describe ValidatorFactory do
    context "creating DefaultValidator" do
        subject { ValidatorFactory.validator('default') }
        it {is_expected.to be_a(DefaultValidator)}
        it {is_expected.to be_kind_of(BaseValidator) }
    end
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) }
...

ValidatorFactory.rb

class ValidatorFactory
    def self.validator(type)
    case type.downcase
    when 'default'
        DefaultValidator
    else
        BaseValidator
    end
end

现在,我找不到关于be()的任何意思并且&lt;用于RSpec文档中的类类型加工。

我是以错误的方式使用“be_a”和“be_kind_of”吗?

1 个答案:

答案 0 :(得分:5)

您的验证方法返回 DefaultValidator和/或BaseValidator。 换句话说,那些不是那些类的实例,但它们的类是Class

be_abe_a_kind_of matchers用于声明对象是传递给它们的Class或Module参数的实例

这就是你的第一个代码示例失败的原因,但第二个代码示例失败了。第二个代码段是测试Class个实例,而不是验证器的实例。