web-dev-qa-db-ja.com

chaiで「未定義のプロパティ 'should'を読み取れません」を解決する方法は?

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');という行を削除すると、テストは正常に機能します。とにかくこの問題を解決できますか?

8
BattleFrog

通常、値がundefinedまたはnullであると思われる場合は、should()の呼び出しで値をラップします。 nullまたはundefinedのプロパティを参照すると例外が発生するため、should(res.body)

ただし、Chaiはこれをサポートしないshouldの古いバージョンを使用しているため、事前に値の存在をアサートする必要があります。

代わりに、もう1つのアサーションを追加します。

_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');
_
10
Qix