Супертестовый пользовательский экспресс-сервер в узле

Пожалуйста, будь нежным со мной. Я новичок в асинхронном кодировании и с головой погрузился в интенсивный проект с использованием узла для разработки и сервера API. Мне это нравится, но некоторые вещи не приходят естественным образом.

Наш проект построен с использованием экспресс-js. У нас есть файл server.js, в котором мы создаем экземпляр экспресс-сервера, который, в свою очередь, создает экземпляр нашего маршрутизатора и так далее. Мне нужно провести интеграционное тестирование этого (частично )полного сервера. Обычно я запускаю из командной строки «%node server.js», а затем использую либо запросы python, либо запросы curl и проверяю ответы.

Теперь мне поручили написать набор модульных и интеграционных тестов, чтобы мы могли автоматизировать наше тестирование в будущем. Я использовал мокко и теперь пытаюсь использовать супертест для интеграционного тестирования. Проблема в том, что супертест ожидает серверный объект, к которому он затем применяет тесты, однако наш файл, который создает наш серверный объект, ничего не возвращает. Я не хочу изменять этот файл, поэтому я не понимаю, как получить доступ к серверному объекту для тестирования.

Мой серверный файл выглядит (частично )вот так:

var express = require('express')

var app = express();

// Express Configuration
app.use(express.favicon()); //handles favicon request, which keeps it out of the log when using a browser :)
app.use(express.bodyParser()); //slurps up the body in chunks the node.js way :)
//...and so on

и мой тестовый файл мокко выглядит так

var request = require('supertest')
 , app     = require('../server.js')
 , assert  = require("assert");

describe('POST /', function(){
  it('should fail bad img_uri', function(done){
    request(app)
       .post('/')
       .send({
            'img_uri' : 'foobar'
        })  
       .expect(500)
       .end(function(err, res){
        console.dir(err)
        console.dir(res)
            done();
        })  
  })    
})

когда я запускаю этот тест, я получаю жалобу на то, что объект приложения не имеет метода с именем address. Мой вопрос: есть ли способ потребовать/вызвать файл server.js, чтобы объект приложения находился в области действия? Или я неправильно об этом говорю. Я также немного поиграл с использованием http.js для совершения вызовов непосредственно на сервер, но мне тоже не повезло. Спасибо!

31
задан akronymn 13 August 2012 в 01:20
поделиться