gpt4 book ai didi

node.js - 如何将“Chai ”和“Chai ”结合起来?

转载 作者:太空宇宙 更新时间:2023-11-03 21:57:09 28 4
gpt4 key购买 nike

我想编写一个 NodeJS chai 测试,它检查某些服务调用的结果(这是一个数组)是否包含一个与我期望的对象相同的对象。结果中可能还有一些我不想检查的字段。

有两个 chai 插件可以解决这个问题:chai-things (它允许您使用 expect(i).to.include.something.that.deep.equals 等语法)和 chai-like (它允许您使用类似于 expect(i).to.be.like 的语法)。

但是,它们结合起来不起作用。

查看这个最小的工作示例:

const chai = require('chai')
const expect = chai.expect
chai.use(require('chai-things'))
chai.use(require('chai-like'))

describe('the chai setup', function() {
it('should work', function(done) {
const i = [{
name: 'Name A',
age: 1
}, {
name: 'Name B',
age: 2
}]

// Works
expect(i).to.include.something.that.deep.equals({
name: 'Name B',
age: 2
})

// Works
expect(i[1]).to.be.like({
name: 'Name B'
})

// Doesn't work
expect(i).to.include.something.that.like({
name: 'Name B'
})
done()
})
})

这不起作用并抛出错误消息:

AssertionError: expected { name: 'Name B', age: 2 } to like { name: 'Name B' }

如何解决这个问题?

最佳答案

使用外部插件并不总是能得到预期的结果。最有可能的是一些命令发生冲突,因为它们没有经过彻底的测试(如果一起测试的话)。

另一种方法是简单地使用函数并循环数组。以下是在浏览器中使用 Mocka 和 Chai 的循环工作示例:

function checkNestedObjects(obj){
expect(obj).is.an('object')
//expect(obj).to.have.keys(['a','b','c']); //- Fires Error
expect(obj).to.have.keys(['a','b']);
}

var initArray=[{"a":1,"b":1},{"a":2,"b":2}];
for( var i=0; i < initArray.length; i++){
checkNestedObjects(initArray[i])
}
<!DOCTYPE html>
<html>
<head>
<link href="https://cdnjs.cloudflare.com/ajax/libs/mocha/2.5.3/mocha.min.css" rel="stylesheet"/>
</head>
<body>
<div id="mocha"></div>
<script src="https://cdnjs.cloudflare.com/ajax/libs/mocha/2.5.3/mocha.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/chai/3.5.0/chai.min.js"></script>

<script>mocha.setup('bdd')</script>
<script>
var expect = chai.expect;
mocha.run();
</script>
</body>
</html>

有时循环内需要异步函数。然后可以使用 Promises 调用循环函数。这里很好地展示了如何使用 forEach 循环数组以及如何使用 Promise.all 调用“done()”:Node JS Promise.all and forEach

关于node.js - 如何将“Chai ”和“Chai ”结合起来?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37612582/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com