RSpec:hash_include不能按预期工作

考虑以下json响应:

{
  "data": {
    "someFunction": null
  },"errors": [
    {
      "message": "Email was already confirmed,please try signing in","locations": [
        {
          "line": 9,"column": 2
        }
      ],"path": [
        "someFunction"
      ],"extensions": {
        "code": "USER_ERROR"
      }
    }
  ]
}

现在在测试中,我期望以下内容是有效的答案:

expect(json_response[:errors]).to contain_exactly(
  hash_including(
    message: "Email was already confirmed,please try signing in.",extensions: { code: 'USER_ERROR' }
  )
)

上面的回答应该是有效的,除了我的测试说不是:

expected collection contained:  [hash_including(:message=>"Email was already confirmed,:extensions=>{:code=>"USER_ERROR"})]
actual collection contained:    [{:extensions=>{:code=>"USER_ERROR"},:locations=>[{:column=>9,:line=>2}],:message=>"Email was already confirmed,:path=>["someFunction"]}]
the missing elements were:      [hash_including(:message=>"Email was already confirmed,:extensions=>{:code=>"USER_ERROR"})]
the extra elements were:        [{:extensions=>{:code=>"USER_ERROR"},:path=>["someFunction"]}]

我在这里做什么错了?

zhu033033 回答:RSpec:hash_include不能按预期工作

问题是您在测试中做了很多(并且不必嵌套匹配器)

因为contain_exactly匹配器将返回true或错误。

因此,建议不要进行复杂的测试,并避免在同一测试中避免超过one expectations

n=10000

应该可以

,

使用Horacio的一项测试,我能够确定自己正在等待一段时间。不使用Rspec的核心功能而不使用它不是我想要的解决方案。但是,这对我自己是一次学习经历,希望遇到此问题的其他人想知道自己做错了什么,他们会发现将contain_exactlyhash_including配对在一起会产生一个简单的错误,可能会导致错误输出欺骗您以为您实际上做错了什么,您可能犯了一个简单的错误。

此健全性检查:

expect(json_response[:errors][0][:message]).to eq 'Email was already confirmed,please try signing in'

导致我发现了我的简单错误:

 expected: "Email was already confirmed,please try signing in."
      got: "Email was already confirmed,please try signing in"
本文链接:https://www.f2er.com/3133717.html

大家都在问