使用 chaiAsPromised 测试集合中的对象是否有键
Using chaiAsPromised to test if object in collection has key
我有一个 promise 函数 project_list
,其中 returns 一个数组对象,如下所示
[{foo:'k',bar:'j'}]
我有两个问题
- 有没有办法检查给定的键是否存在于数组中?
我尝试了下面的方法,但不幸的是 - 它似乎只检查值而不是键
it('should return an array of objects containing project_details',function(){
return expect(project_list(data)).to.eventually.have.deep.property('[0]','foo')
})
- 有没有办法在一个 promise 对象上测试多个断言?即 - 我可以为一个 promise 函数设置多个 expect 语句吗?
我试过了
it('should return an array of objects containing project_details',function(done){
project_list(data).then(function(result){
expect(result)[0].to.have.key('foo')
expect(result)[0].to.have.key('bar')
done()
})
})
当我尝试测试上述内容时出现超时错误。
因此,我以这种方式构建测试
before(function(done){
project_list(data).then(function(results){
console.log(results)
result = results;
done()
})
})
it('should retrieve a list',function(){
expect(result).to.be.an('array')
})
it('should return an array of objects containing project_details',function(){
expect(result[0]).to.contain.keys('foo')
})
这似乎有效。但是我想知道有没有更好的waty
当您使用 property
时,第二个参数是第一个参数中寻址的 属性 的 值 。如果你只想检查 属性 是否存在,那么你不应该有第二个参数,第一个应该是 到 属性 的完整路径 。
至于做多重期望,是的,你可以。您只需要正确编写 expect
调用即可。 expect(result)[0]
没有意义。您应该检查 keys
(又名 key
)是如何工作的。如果您不指定 any
或 all
,则 all
是默认值,因此您的预期都会因此而失败。在下面的示例中,我选择 any
的目的是 a) 说明多个 expect
和 b) 测试通过。这两个调用可以组合成:expect(result[0]).to.have.all.keys('foo', 'bar');
根据您问题中的代码,这是一个示例:
var chai = require("chai");
var chaiAsPromised = require("chai-as-promised");
var expect = chai.expect;
var value = [{foo:'k', bar:'j'}];
function project_list() {
return Promise.resolve(value);
}
chai.use(chaiAsPromised);
it("test 1", function () {
return expect(project_list()).to.eventually.have.deep.property('[0].foo');
});
it('test 2',function(){
return project_list().then(function(result){
expect(result[0]).to.have.any.key('foo');
expect(result[0]).to.have.any.key('bar');
});
});
我有一个 promise 函数 project_list
,其中 returns 一个数组对象,如下所示
[{foo:'k',bar:'j'}]
我有两个问题
- 有没有办法检查给定的键是否存在于数组中?
我尝试了下面的方法,但不幸的是 - 它似乎只检查值而不是键
it('should return an array of objects containing project_details',function(){
return expect(project_list(data)).to.eventually.have.deep.property('[0]','foo')
})
- 有没有办法在一个 promise 对象上测试多个断言?即 - 我可以为一个 promise 函数设置多个 expect 语句吗?
我试过了
it('should return an array of objects containing project_details',function(done){
project_list(data).then(function(result){
expect(result)[0].to.have.key('foo')
expect(result)[0].to.have.key('bar')
done()
})
})
当我尝试测试上述内容时出现超时错误。
因此,我以这种方式构建测试
before(function(done){
project_list(data).then(function(results){
console.log(results)
result = results;
done()
})
})
it('should retrieve a list',function(){
expect(result).to.be.an('array')
})
it('should return an array of objects containing project_details',function(){
expect(result[0]).to.contain.keys('foo')
})
这似乎有效。但是我想知道有没有更好的waty
当您使用 property
时,第二个参数是第一个参数中寻址的 属性 的 值 。如果你只想检查 属性 是否存在,那么你不应该有第二个参数,第一个应该是 到 属性 的完整路径 。
至于做多重期望,是的,你可以。您只需要正确编写 expect
调用即可。 expect(result)[0]
没有意义。您应该检查 keys
(又名 key
)是如何工作的。如果您不指定 any
或 all
,则 all
是默认值,因此您的预期都会因此而失败。在下面的示例中,我选择 any
的目的是 a) 说明多个 expect
和 b) 测试通过。这两个调用可以组合成:expect(result[0]).to.have.all.keys('foo', 'bar');
根据您问题中的代码,这是一个示例:
var chai = require("chai");
var chaiAsPromised = require("chai-as-promised");
var expect = chai.expect;
var value = [{foo:'k', bar:'j'}];
function project_list() {
return Promise.resolve(value);
}
chai.use(chaiAsPromised);
it("test 1", function () {
return expect(project_list()).to.eventually.have.deep.property('[0].foo');
});
it('test 2',function(){
return project_list().then(function(result){
expect(result[0]).to.have.any.key('foo');
expect(result[0]).to.have.any.key('bar');
});
});