javascript - 使用 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)
我很想得到一个解释。如果存在另一种方式。
解决方案
因为您破坏了最后一个成员 ( ) 的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
不再绑定到它。通过显式绑定它,我们可以保留它。deep
this
.bind()
这也是您的第二个代码示例有效的原因,因为您正确地调用equal()
了deep
.
推荐阅读
- python - 编写脚本以使用正则表达式在两个模式之间打印字符串,但仅最后一次出现
- python - 如何使用 Python 将 Azure 中的文件从一个存储帐户复制到另一个存储帐户?
- spring-data-jpa - JPA 会生成多个自动生成的列吗
- node.js - 快速会话不断让我退出
- perl - 什么时候从 perl 中删除了 -P 选项?
- asp.net - ASP.NET Core - NLog - 如何禁用特定路由的日志记录?
- html - 我正在使用图片覆盖整个屏幕,但它没有覆盖,垂直滚动条显示,水平滚动条没有
- python - 我想使用 google smtp 服务器发送电子邮件。但它总是显示 SMTPAuthenticationError
- python - python字符串切片与交替步幅
- html - 在引导程序中与标签垂直对齐顶部显示文本