繁体   English   中英

使用Chai JS进行自动化测试

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM