gpt4 book ai didi

node.js - 超测: Can't set headers after they are sent

转载 作者:太空宇宙 更新时间:2023-11-03 22:13:04 28 4
gpt4 key购买 nike

express 和 mongoose。

为了进行测试,我使用 supertest、mocha 和 mockgoose。

当我尝试为两个连续测试设置身份验证 token 时,第二个测试失败并抛出发送后无法设置 header 。

测试用例如下所示。

var chai = require('chai'),
expect = chai.expect,
server = null,
request = require('supertest'),
mockgoose = require('mockgoose'),
mongoose = require('mongoose');

describe('Organization', () => {

var token = 'success_token',
orgName = 'default_org_name',
users,
organization;

before((done) => {
mockgoose(mongoose);
server = request(require('../../server/server.js'));
});

it('should get list of organizations for a proper user', (done) => {

server
.get('/api/organization/')
.set({token : token})
.expect(200)
.end((err, res) => {
if (err) return done(err);
expect(res.body.length).to.equal(1);
expect(res.body[0].name).to.equal(orgName);
done();
});

});

it('should send a 500 response for a incorrect user', (done) => {

var errorToken = 'error token';

server
.get('/api/organization/')
.set({token : errorToken})
.expect(500)
.end((err, res) => {
if (err) return done(err);
done();
});

});

after((done) => {
mockgoose.reset();
done();
});


});

第一个测试用例通过,但第二个测试用例失败。它抛出一个错误

Error: Can't set headers after they are sent.
at ServerResponse.OutgoingMessage.setHeader (_http_outgoing.js:346:11)
at ServerResponse.header (/home/tricon/aniket/dev/publab/triconpublish_api/node_modules/express/lib/response.js:718:10)
at ServerResponse.send (/home/tricon/aniket/dev/publab/triconpublish_api/node_modules/express/lib/response.js:163:12)
at ServerResponse.json (/home/tricon/aniket/dev/publab/triconpublish_api/node_modules/express/lib/response.js:249:15)
at ServerResponse.send (/home/tricon/aniket/dev/publab/triconpublish_api/node_modules/express/lib/response.js:151:21)
at /home/tricon/aniket/dev/publab/triconpublish_api/server/filter.js:9:1744
at Query.<anonymous> (/home/tricon/aniket/dev/publab/triconpublish_api/node_modules/mongoose/lib/query.js:2169:28)
at /home/tricon/aniket/dev/publab/triconpublish_api/node_modules/kareem/index.js:177:19
at /home/tricon/aniket/dev/publab/triconpublish_api/node_modules/kareem/index.js:109:16
at _combinedTickCallback (node.js:370:9)
at process._tickDomainCallback (node.js:425:11)

我不明白原因。

您可以注意到我正在设置两个不同的 token 。一种用于成功场景,另一种用于错误场景。如果我在第二个测试用例中设置相同的成功标记,则不会抛出此错误。

请帮忙!!!

最佳答案

我认为您需要将 before 函数调用更改为 beforeEach 调用。这将在每次测试之前将您的服务器重置为已知的基本状态。目前它正在第一次测试之前运行。

这个SO answer谈论 Node 的 serverResponse 对象。这应该可以帮助您确保在运行每个测试之前设置您的服务器。

关于node.js - 超测: Can't set headers after they are sent,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36686099/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com