这是我的测试:
const request = require('supertest');
const makeRestController = require('../main/controller/restController');
const userRepository = {
getCount: async () => {
return 2;
}
};
const logger = {
info: () => {
}
};
let appUnderTest = null;
beforeEach(() => {
appUnderTest = makeRestController(userRepository, 8081, logger);
});
afterEach(() => {
appUnderTest.server.close();
});
test('test count', function (done) {
if(!appUnderTest) console.log("UNDEFINED!");
request(appUnderTest.app)
.get('/')
.end(function (err, res) {
if (err) return done(err);
expect(res).toBeDefined();
done();
});
});
我用jest
运行它。
我有一种奇怪的行为。
每次运行测试后,此测试都失败了:
FAIL __tests__/appWeb.js
● test count
expect(received).toBeDefined()
Expected value to be defined, instead received
undefined
at Test.<anonymous> (__tests__/appWeb.js:31:21)
at Test.Object.<anonymous>.Test.assert (node_modules/supertest/lib/test.js:179:6)
at Server.assert (node_modules/supertest/lib/test.js:131:12)
at Object.onceWrapper (events.js:314:30)
at emitNone (events.js:105:13)
at Server.emit (events.js:207:7)
at emitCloseNT (net.js:1648:8)
at _combinedTickCallback (internal/process/next_tick.js:135:11)
at process._tickCallback (internal/process/next_tick.js:180:9)
然后下一次,一切都是绿色,下一次是红色。 你能告诉我我做错了吗?
函数makeController
返回{server, app}
,因为我需要在测试后关闭服务器,否则jest不会退出。
const express = require('express');
function makeRestController(userRepository, HTTP_PORT, logger) {
const app = express();
app.get('/', function (req, res) {
userRepository.getCount().then((count) => res.send(`Count: ${count}`));
});
const server = app.listen(HTTP_PORT, function () {
logger.info('App listening on port ' + HTTP_PORT + '!');
});
return {server, app};
}
module.exports = makeRestController;
我还做了另一次尝试,回复beforeEach
做出类似这样的承诺:
test('test count', function (done) {
if(!appUnderTest) console.log("UNDEFINED!");
appUnderTest.then(x => {
request(x.app)
.get('/')
.end(function (err, res) {
if (err) return done(err);
expect(res).toBeDefined();
done();
});
});
});
但由于expect(res).toBeDefined();