Подтвердить что ты не робот

Supertest пользовательский экспресс-сервер в node

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

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

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

Мой файл сервера выглядит (частично) следующим образом:

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, чтобы делать вызовы непосредственно на сервер, но также не повезло. Спасибо!

4b9b3361

Ответ 1

Вам нужно экспортировать объект app в server.js:

var app = express();

module.exports = app;

...