我想加载一个用于测试的配置文件。
其中一个参数是类型。
那么我该如何替换下一行。
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
的方法。