首页 > 解决方案 > 使用 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_modules\chai\lib\chai\core\assertions.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)

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

标签: javascriptchai

解决方案


因为您破坏了最后一个成员 ( ) 的thisValueequal,它试图访问但不再绑定到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调用正在尝试访问对象,但this.assert不再绑定到它。通过显式绑定它,我们可以保留它。deepthis.bind()

这也是您的第二个代码示例有效的原因,因为您正确地调用equal()deep.


推荐阅读