【问题标题】:chai deep equal and equal not working柴深平等和平等不工作
【发布时间】:2016-04-24 07:54:56
【问题描述】:

有些柴是怎么不工作的

promise = doSomething()

expect(promise).to.eventually.equal(obj)

expect(promise).to.eventually.deep.equal(obj)

但是在断言错误中我得到了这个

AssertionError: expected {a: "2", b: "3"} to equal {a: "2", b: "3"}

顺便说一句,我已经尝试过 should 并且得到了相同的结果

【问题讨论】:

  • 简单的return expect(Promise.resolve({ a: "2", b: "3" })).to.eventually.deep.equal({ a: "2", b: "3" }); 对我有用。你确定结果真的符合预期的输出吗?
  • 你确定你没有同时运行这两个断言吗?使用 deep 标志是正确的,因为您不应该期望对象相等。
  • 不,我没有同时运行两者。 @Jacob 是的,你的解决方案也适用于我,使用 when 但我的承诺没有,奇怪的是断言错误得到了相同的值。
  • 你用的是什么插件? chai-as-promised 是我使用的。
  • 我猜promise返回的值可能是JSON的字符串,比如"{a: '2', b: '3'}",如果是这样,在deep equal之前试试JSON.parse()这个值...

标签: javascript mocha.js chai


【解决方案1】:

我猜promise返回的值可能是JSON字符串,比如

"{a: '2', b: '3'}"

我以前遇到过哪种情况。如果是这样,在深度相等操作之前尝试JSON.parse()这个值。

【讨论】:

    【解决方案2】:

    似乎 chai 检查的不仅仅是对象结构。

    我在JSON.parse(JSON.stringify(response)) 的承诺中做到了这一点,这使它起作用,所以根据这个问题How to copy JavaScript object to new variable NOT by reference? 我假设 chai 正在检查对象的引用,这对我来说毫无意义。

    不是我期望的解决方案,但对我有用,是否有人有更好的解决方案,请分享。

    【讨论】:

      【解决方案3】:

      Object.getOwnPropertyNames(obj) 是查看对象实际包含什么的好方法,如果它们都是对象,即使在控制台日志中看起来也一样,但并不相同。

      例如,chai deep.equal 将识别 {a:1, b:2} 和来自 Mongoose 实例的类似对象不相同,但它实际上不会告诉您有什么不同(“+预期 - 实际”为空)。 Object.getOwnPropertNames 将显示对象的真实内容。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2011-08-07
        • 1970-01-01
        • 2021-11-01
        • 1970-01-01
        • 2019-07-19
        • 1970-01-01
        • 2014-09-30
        相关资源
        最近更新 更多