Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/36.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js 超级测试:Can';t在发送邮件后设置邮件头_Node.js_Express_Supertest - Fatal编程技术网

Node.js 超级测试:Can';t在发送邮件后设置邮件头

Node.js 超级测试:Can';t在发送邮件后设置邮件头,node.js,express,supertest,Node.js,Express,Supertest,快车和猫鼬 对于测试,我使用supertest、摩卡和mockgoose 当我尝试为两个连续的测试设置auth令牌时,第二个测试失败,在发送后抛出无法设置头。 测试用例如下所示 var chai = require('chai'), expect = chai.expect, server = null, request = require('supertest'), mockgoose = require('mockgoose'), mongoose

快车和猫鼬

对于测试,我使用supertest、摩卡和mockgoose

当我尝试为两个连续的测试设置auth令牌时,第二个测试失败,在发送后抛出
无法设置头。

测试用例如下所示

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)
错误:发送头后无法设置头。
在ServerResponse.OutgoingMessage.setHeader(_http_outgoing.js:346:11)
在ServerResponse.header(/home/tricon/aniket/dev/publab/triconpublish\u api/node\u modules/express/lib/response.js:718:10)
在ServerResponse.send(/home/tricon/aniket/dev/publab/triconpublish\u api/node\u modules/express/lib/response.js:163:12)
位于ServerResponse.json(/home/tricon/aniket/dev/publab/triconpublish\u api/node\u modules/express/lib/response.js:249:15)
在ServerResponse.send(/home/tricon/aniket/dev/publab/triconpublish\u api/node\u modules/express/lib/response.js:151:21)
在/home/tricon/aniket/dev/publab/triconpublish_api/server/filter.js:9:1744
在询问时。(/home/tricon/aniket/dev/publab/triconpublish_api/node_modules/mongoose/lib/query.js:2169:28)
at/home/tricon/aniket/dev/publab/triconpublish\u api/node\u modules/kareem/index.js:177:19
at/home/tricon/aniket/dev/publab/triconpublish\u api/node\u modules/kareem/index.js:109:16
at_combinedTickCallback(node.js:370:9)
在进程中。_tickDomainCallback(node.js:425:11)
我不明白原因

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


请帮忙

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

这里讨论的是节点的serverResponse对象。这将帮助您确保在运行每个测试之前设置好服务器