Ошибка: Route.get () требует функцию обратного вызова, но получил [объект объекта]. Тестирование роутера + функции res.render с Chai - PullRequest
0 голосов
/ 02 мая 2020

Мой главный. js выглядит так:

'use strict';
const express = require( 'express' );
const app = express();
const homeController = require( './controllers/homeController' );
const errorController = require( './controllers/errorController')

console.log("+get homeController");
app.get( '/', homeController );

console.log('+get  homeController.showUsers');
app.get( '/users', homeController.showUsers );

В homeController. js есть метод router.get, который я хочу протестировать с помощью Chai:

/* GET home page. */
router.get('/', function(req, res, next) {
  res.render('index', {
    title: 'Internship Approval System'
  });
});
... 
module.exports = router;

Мой файл router.test. js выглядит следующим образом:

var sinon = require('sinon');
var chai = require('chai');
var expect = chai.expect;

var router = require('./controllers/homeController');

describe('home route', function() {
  it('should return rendered response', function() {
    var req = {};
    var res = {
      render: sinon.spy()
    };

    return router.get(req, res).then(function() {
      expect(res.render.calledOnce).to.be.true;
    });
  });
});

Я получаю сообщение об ошибке при попытке определить, вызывается ли он один раз:

  1) home route
       should return a rendered response:
     Error: Route.get() requires a callback function but got a [object Object]
      at Route.<computed> [as get] (node_modules\express\lib\router\route.js:202:15)

      at Function.proto.<computed> [as get] (node_modules\express\lib\router\index.js:510:19)
      at Context.<anonymous> (router.test.js:15:19)
      at processImmediate (internal/timers.js:439:21)

Как я могу изменить app.get( '/', homeController ); в main для включения функции обратного вызова?

Ответы [ 2 ]

0 голосов
/ 03 мая 2020
describe("/users", () => {
  it("it should route to /users properly", done => {
    chai
      .request(app)
      .get("/users")
      .end((errors, res) => {
        expect(res).to.have.status(200);
        expect(errors).to.be.equal(null);
        done();
      });
  });
});

кажется, работает

0 голосов
/ 02 мая 2020

homeController. js

/* GET home page. */
router.get('/', function(req, res, next) {
  res.render('index', {
    title: 'Internship Approval System'
  });
});

----

// Add this line in controller
module.exports = router;

main. js

// replace this
app.get( '/', homeController );

// like so
app.use('/', homeController);
...