我有一个promise函数project_list
,它返回一个数组对象,如下面的
[{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')
})
我试过这个
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')
})
这似乎奏效了。但我想知道是否有更好的白痴
答案 0 :(得分:0)
当您使用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');
});
});