[英]Automated testing with 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)
我很乐意对此进行解释。 是否存在另一种方法。
因为您正在破坏最后一个成员( 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
方法。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.