超级测试 + 磁带 + 恢复 - 无法在连续调用中设置两次标头错误



我正在使用Node.js和Restify构建API。我正在尝试使用Supertest和Tape进行功能端点测试。我有一个测试,使两个连续调用API,它说,我不能设置他们发送后的头。

UserController.js

/*
 * Create a user.
 */
exports.store = function(req, res, next) {
    // Get request input.
    var firstName = ParsesRequest.getValue(req, 'firstName'),
        lastName = ParsesRequest.getValue(req, 'lastName'),
        email = ParsesRequest.getValue(req, 'email'),
        password = ParsesRequest.getValue(req, 'password');
    // Create command.
    var command = new CreateUserCommand(firstName, lastName, email, password);
    // Execute command.
    CommandBus.execute(command, function(error, data) {
        var hasError = !!error && !data,
            status,
            message;
        status = (!hasError) ? StatusCodes.Created : StatusCodes.InternalServerError;
        message = (!hasError) ? UserTransformer.transform(data) : error;
        res.json(status, message);
    });
}

CreatesUserApiTest.js

var test            = require('tape');
var CreatesFakeUser = require('../../helpers/CreatesFakeUser'); 
var request         = require('supertest');
var config          = require('../../../config/Config').getConfiguration('test');
var url             = 'http://' + config.url + ':' + config.port;
test('Creates two users with same email and returns error', function(assert) {
    var user = CreatesFakeUser.generate();
    request(url)
        .post('/user')
        .set('Accept', 'application/json')
        .send(user)
        .expect(201)
        .end(function(err, res){
            assert.equals(res.status, 201, 'Returns 201 as status code.');
            assert.equals(!!res.body.id, true, 'Result body has an id field.');
        });
    request(url)
        .post('/user')
        .set('Accept', 'application/json')
        .send(user)
        .expect(500)
        .end(function(err, res){
            assert.equals(res.status, 500, 'Returns 500 because user already exists.');
            assert.end();
        });
});

有人知道为什么第二个请求失败了吗?我只发送res.json一次在我的方法,所以它似乎不应该设置头两次。此外,我不确定它是否与设置标题上的连接关闭有关,但我试过了,它没有帮助。也许这和async有关。

任何帮助将不胜感激!

我不能说没有更多的代码,但它可能是,在第二次调用有一个错误处理程序,返回一些东西回客户端之前,你调用res.json()。

例如,你是否在服务器启动时设置了InternalServerError处理?

相关内容

  • 没有找到相关文章

最新更新