使用 chai js 进行自动化测试



我想加载一个用于测试的配置文件。

其中一个参数是类型。

那么我该如何替换下一行。

expect(res.body).to.deep.equal(test.expect

带有"to.deep.equal"字符串。

我试过了:

let exp = expect(res.body);
test.type.split('.').forEach(t => exp = exp[t])
exp(test.expect)

但后来我得到了:

Uncaught TypeError: this.assert is not a function
  at assertEqual (node_moduleschailibchaicoreassertions.js:1026:12)

编辑:

我设法通过以下方式做到这一点:

let exp = expect(res.body);
test.type.split('.').slice(0,-1).forEach(t => exp = exp[t])
exp[_.last(test.type.split('.'))](test.expect)

我很想得到一个解释。 如果存在另一种方式。

因为你破坏了最后一个成员 ( equal 的 thisValue ,它试图访问它,但不再绑定到deep对象。

(我真的在屠杀解释)。

你可以做:

let exp = expect(res.body);
test.type.split('.').forEach(t => {
    exp = typeof exp[t] === 'function'
        ? exp[t].bind(exp)
        : exp[t];
});
exp(test.expect)

为了进一步解释,这就是您看到TypeError: this.assert is not a function的原因 - equal调用正在尝试访问deep对象的this.assert,但this不再绑定到它。通过.bind()显式绑定它,我们可以保留它。

这也是您的第二个代码示例工作的原因,因为您正确地调用了equal()作为deep的方法。

最新更新