好的,所以我有所有这些依赖于 mocha 中的 node-mocks-http 的测试来测试我的 express.js 控制器,它们仍然工作得很好。
问题是我创建的任何新测试都拒绝发出“结束”事件并完成。我决定编写一个非常简单的控制器函数并在一个全新的项目中进行测试,但我仍然没有触发“结束”事件。
这是我的控制器(index.js):
exports.testFunc = function(req, res) {
res.status(200).json({
status: 'success',
status_message: 'OK',
data: {
firstRun: true
}
});
}
这是我的测试(test.js):
let httpMocks = require('node-mocks-http');
let request = httpMocks.createRequest({
method: 'GET',
url: '/test',
});
let response = httpMocks.createResponse({
eventEmitter: require('events').EventEmitter
});
const loadingController = require('./index');
describe('loadingController:', () => {
describe('first_run_status: ', () => {
it('should really respond here', (done) => {
loadingController.testFunc(request, response);
response.on('end', () => {
done();
});
});
});
});
这是我运行的确切代码
./node_modules/mocha/bin/_mocha ./test.js --timeout 10000 --exit
这绝对拒绝发出“结束”事件并结束测试......
这真的让我发疯,任何人都可以看到这里有什么问题吗?或者是什么可能使这不起作用?
仅供参考,当我在运行 testFunc 之前将响应对象记录到控制台时,我可以看到完成:false并且当我在看到之后记录它时
EventEmitter {
_headers: { 'content-type': 'application/json' },
cookies: {},
finished: true,
headersSent: true,
statusCode: 200,
....etc.
那完成了:真的那么为什么不发出“结束”事件?