如何用笑话正确地对Express 4服务器进行单元测试

问题描述 投票:0回答:1

[为了更好地理解它,我正在测试此简单的Express服务器(v 4)设置代码:

server.js

import express from 'express';
import router from './routes';

const app = express();
app.use(router);

const server = app.listen(3000, function () {
  var port = this.address().port;
  /* eslint-disable no-console */
  console.log('Example app listening on port %s!', port);
});

export default app; // as suggested by Ron

使用以下路由器

routes.js

var express = require('express');
var defaultController = require('./controllers/defaultController');

var router = express.Router();

router.get('/', defaultController.getHome);

module.exports = router;

干净(倾斜),并且从头开始运行良好

我写了(从tuts复制/粘贴..写于2015年。)以下规范,用Jest和SuperTest测试server.js。>

server.spec.js

var request = require('supertest');

describe('loading express', function () {
    var server; // http server object

    beforeEach(function () {
        delete require.cache[require.resolve('../src/server')];
        server = require('../src/server');
    });

    afterEach(function () {
        server.close();
    });

    it('responds to /', function testSlash(done) {
        request(server)
          .get('/')
          .expect(200, done);
    });

    it('404 everything else', function testPath(done) {
        request(server)
          .get('/foo/bar')
          .expect(404, done);
    });
});

但是失败了,.get()上出现类型错误。

TypeError:app.address不是函数

并在server.clos()上键入错误

TypeError:server.close不是函数

这里是完整的console.log

$纱线测试

    yarn run v1.9.4
    $ jest --runInBand --verbose
     FAIL  test/server.spec.js
      loading express
        ✕ responds to / (275ms)
        ✕ 404 everything else (1ms)

      ● loading express › responds to /

        TypeError: app.address is not a function

          16 |     it('responds to /', function testSlash(done) {
          17 |         request(server)
        > 18 |           .get('/')
             |            ^
          19 |           .expect(200, done);
          20 |     });
          21 |

          at Test.Object.<anonymous>.Test.serverAddress (node_modules/supertest/lib/test.js:55:18)
          at new Test (node_modules/supertest/lib/test.js:36:12)
          at Object.obj.(anonymous function) [as get] (node_modules/supertest/index.js:25:14)
          at Object.get (test/server.spec.js:18:12)

      ● loading express › responds to /

        TypeError: server.close is not a function

          11 |
          12 |     afterEach(function () {
        > 13 |         server.close();
             |                ^
          14 |     });
          15 |
          16 |     it('responds to /', function testSlash(done) {

          at Object.close (test/server.spec.js:13:16)

      ● loading express › 404 everything else

        TypeError: app.address is not a function

          22 |     it('404 everything else', function testPath(done) {
          23 |         request(server)
        > 24 |           .get('/foo/bar')
             |            ^
          25 |           .expect(404, done);
          26 |     });
          27 | });

          at Test.Object.<anonymous>.Test.serverAddress (node_modules/supertest/lib/test.js:55:18)
          at new Test (node_modules/supertest/lib/test.js:36:12)
          at Object.obj.(anonymous function) [as get] (node_modules/supertest/index.js:25:14)
          at Object.get (test/server.spec.js:24:12)

      ● loading express › 404 everything else

        TypeError: server.close is not a function

          11 |
          12 |     afterEach(function () {
        > 13 |         server.close();
             |                ^
          14 |     });
          15 |
          16 |     it('responds to /', function testSlash(done) {

          at Object.close (test/server.spec.js:13:16)

      console.log src/server.js:11
        Example app listening on port 3000!

    Test Suites: 1 failed, 1 total
    Tests:       2 failed, 2 total
    Snapshots:   0 total
    Time:        1.062s
    Ran all test suites.
    Jest did not exit one second after the test run has completed.

    This usually means that there are asynchronous operations that weren't stopped in your tests. Consider running Jest with `--detectOpenHandles` to troubleshoot this issue.

[为了更好地理解它,我正在测试此简单的Express服务器(v 4)设置代码:server.js import express from'express';从“ ./routes”导入路由器; const app = express(); ...

node.js express jestjs supertest
1个回答
0
投票

错误:

© www.soinside.com 2019 - 2024. All rights reserved.