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