Сбой тестирования с Mocha, Chai и Supertest (NodeJS), получение данных из mongodb - PullRequest
0 голосов
/ 06 ноября 2018

Я впервые тестирую маршруты в узле js, и я использую mocha, supertest и chai. Вот мой файл server.js:

const express = require('express');
const app = express();
const path = require('path');
const http = require('http').Server(app);
const io = require('socket.io')(http);
const bodyParser = require('body-parser');
const fs = require('fs');
//const helpers = require('./includes/helpers.js');
var cors = require('cors');
app.use(cors());
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: false }));
app.use(express.static(path.join(__dirname, '../dist/chat/')));
require('./listen.js')(http);
app.use((req, res, next) => {
 res.setHeader("Access-Control-Allow-Origin","*");
 res.setHeader("Access-Control-Allow-Headers","Origin, X-Requested-With, Content-Type, Accept");
 res.setHeader("Access-Control-Allow-Methods","GET, POST, PATCH, DELETE, OPTIONS"); 
 next();
});
const MongoClient = require('mongodb').MongoClient;
const url = 'mongodb://localhost:27017';
MongoClient.connect(url, { poolSize: 10 }, function (err, client) {
  if (err) { return console.log(err) }
  const dbName = 'testdb';
  const db = client.db(dbName);
  require('./routes/create.js')(app, db);
  require('./routes/remove.js')(app, db);
  require('./routes/update.js')(app, db);
  require('./routes/read.js')(app, db);
  require('./routes/add.js')(app, db);
  require('./routes/auth.js')(app, db);
  require('./routes/search.js')(app, db);
});

И я хочу проверить маршрут read.js, в основном маршрут чтения возвращает массив JSON, который имеет несколько параметров ключ / значение, например, идентификатор (ключ), имя (ключ) и т. д. это мой файл test.js:

var assert = require('assert');
const express = require('express');
const app = express();
var read = require('../server/routes/read.js');
var http = require('http');
var helpers = require('./include/helpers');
//var api = require('../server/server.js');

var should = require('chai').should();
var expect = require('chai').expect;
var supertest = require('supertest');
var api = supertest('http://localhost:3000');
var request = require('supertest');


describe('The read route',()=>{
  it('should be an object with valid parameters',function(done){
   api.get('/api/read')
   .set('Accept','application/json')
   .expect(200)
   .end(function(err,res){
     if (err) throw err;
     expect(res.body).to.not.equal(null);
    expect(res.body).to.have.property('id');
     done();
    });
  });
});

Тестирование работает нормально, единственная проблема заключается в том, что когда я запускаю строку: 'ожидаем (res.body) .to.have.property (' id ')', тест завершается ошибкой, говоря, что ожидается [], я не поймите, что не так, мой маршрут чтения возвращает массив JSON с параметрами: {id: 4, prodname: 'iPhone', тип 'phone', описание: 'Nice phone'} (кстати, он возвращает данные из mongodb) он должен определить идентификатор внутри параметра. Любая помощь?

...