Пожалуйста, будьте осторожны со мной. Я новичок в асинхронном кодировании и был брошен вперёд в интенсивный проект с использованием 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, чтобы делать вызовы непосредственно на сервер, но также не повезло. Спасибо!