如何解决"无法阅读财产'应该'未定义"在柴?

时间:2017-05-15 08:50:42

标签: node.js mocha chai

我尝试测试我的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');时,测试工作正常 无论如何我能解决这个问题吗?

1 个答案:

答案 0 :(得分:10)

通常情况下,当您怀疑某个值可能是undefinednull时,您可以将该值包装在should()的调用中,例如should(res.body),因为引用nullundefined上的任何属性会导致异常。

但是,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');