2015-08-28 7 views
0

Я создаю API с помощью Node.js и Restify. Я пытаюсь выполнить функциональное тестирование конечных точек с помощью Supertest и Tape. У меня есть тест, который делает два последовательных обращения к API, и он говорит, что я не могу установить заголовки после их отправки.Supertest + Tape + Restify - Невозможно установить заголовки дважды при последовательных вызовах

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 один раз в свой метод, поэтому не кажется, что он должен устанавливать заголовки дважды. Кроме того, я не уверен, что это связано с настройкой соединения в заголовке, но я попытался, и это не поможет. Может быть, это как-то связано с асинксом.

Любая помощь будет оценена!

ответ

1

Я не могу сказать без кода, но может быть, что во втором вызове есть обработчик ошибок, который возвращает что-то обратно клиенту перед вызовом res.json().

Вы настроили обработку InternalServerError при запуске вашего сервера, например?