Rspec的详细父/子匹配器错误

时间:2015-03-16 01:10:28

标签: ruby rspec

鉴于以下代码,当我遇到失败时,我希望看到父和子的差异都显示出来。目前,如果我在儿童级别上有不匹配的情况,我只会得到反馈,即我的父母不包含预期的孩子,而不是我的实际孩子。:

RSpec::Matchers.define :have_categories do |expected|
  match do |actual|
    expected.each do |ex|
      lines = ex.map do |ex_line|
        an_instance_of(Model::SubCategory).and(have_attributes(ex_line))
      end
      expect(actual.categories).to include(an_instance_of(Model::Category).and(
                                             have_attributes(sub_categories: contain_exactly(*lines))))
    end
  end
end

1 个答案:

答案 0 :(得分:2)

基本上,您需要实现failure_message方法以格式化预期的错误消息,在这里您可以创建一个您希望看到的差异字符串:

RSpec::Matchers.define :have_categories do |expected|
  match do |actual|
    expected.each do |ex|
      lines = ex.map do |ex_line|
        an_instance_of(Model::SubCategory).and(have_attributes(ex_line))
      end
      expect(actual.categories).to include(an_instance_of(Model::Category).and(
                                         have_attributes(sub_categories: contain_exactly(*lines))))
    end

    failure_message do |actual|
      # here you are able to use both `actual` and `expected`
      # to create your error message
    end
  end
end

请提供有关您域名的更多信息,以便我尽力帮您准备正确的错误消息。

希望有所帮助!