我尝试测试我的RESTful nodejs API测试,但一直遇到以下错误。
Uncaught TypeError: Cannot read property 'should' of undefined
我正在使用我的API的restify框架。
'use strict';
const mongoose = require('mongoose');
const Customer = require('../src/models/customerSchema');
const chai = require('chai');
const chaiHttp = require('chai-http');
const server = require('../src/app');
const should = chai.should();
chai.use(chaiHttp);
describe('Customers', () => {
describe('/getCustomers', () => {
it('it should GET all the customers', (done) => {
chai.request(server)
.get('/getCustomers')
.end((err, res) => {
res.should.have.status(200);
res.body.should.be.a('array');
done();
});
});
});
});
当我删除行res.body.should.be.a('array');
时,测试工作正常
无论如何我能解决这个问题吗?
答案 0 :(得分:10)
通常情况下,当您怀疑某个值可能是undefined
或null
时,您可以将该值包装在should()
的调用中,例如should(res.body)
,因为引用null
或undefined
上的任何属性会导致异常。
但是,Chai使用的旧版should
不支持此版本,因此您需要预先声明该值的存在。
相反,再添加一个断言:
should.exist(res.body);
res.body.should.be.a('array');
Chai使用should
的旧/过时版本,因此通常的should(x).be.a('array')
无效。
或者,您可以直接使用官方should
包:
$ npm install --save-dev should
并将其用作替代品:
const should = require('should');
should(res.body).be.a('array');