2016-04-01 4 views
0

Я построил приложение, используя node.js + expressjs, и использую mocha для проверки моего запроса на отправку. Мой тест терпит неудачу, потому что ответ от моего почтового запроса является null, но я не знаю, почему ...node.js/express/mocha testing post request issue

Мой API:

api.post('/api/addreport', function(req, res) { 
    console.log('add report hit..'); //this does not print during testing 
    console.log(req.body); //this does not print during testing 
    res.sendStatus(200); 
}); 

Мой тест:

var express = require('express'); 
var app = express(); 
var chai = require('chai'); 
var expect = require('chai').expect; 
var should = require('should'); 
var supertest = require('supertest'); 
var server = supertest.agent("https://localhost:3001"); 
var request = require('supertest'); 
var bodyParser = require('body-parser'); 


//Body parser 
app.use(bodyParser.json()); 
app.use(bodyParser.urlencoded({ extended: false })); 

it("should post", function(done){ 
request(app.listen()) 
    .post('/api/addreport/') 
    .send(data) 
    .end(function(res){ 
     console.log('---response---'); 
     console.log(res); //returns null 
     expect(res.status).to.equal(200); //returns status of null 
     done(); 
    }) 
}); 

mocha ajax работает результаты в:

1) should post: 
Uncaught TypeError: Cannot read property 'status' of null 

Мои данные:

var data = { 
    report_id: 'abc123' + Math.random(10), 
    project_code: 'test_project_code', 
    startDate: '2016-01-01', 
    endDate: '2016-01-15', 
}; 

Может кто-нибудь помочь?

Заранее благодарен!

+0

Ваши данные? Вы настроили курьер? –

+0

Привет, я обновил свой вопрос, чтобы включить все мои тестовые пакеты и данные. И да, я использую курьерский экспресс. –

+0

Ты ничего не испытываешь. Я бы хотя бы вызвал «сделанный (ошибочный)»; поэтому вы знаете, что ошибка не была возвращена. Иногда supertest не проверяет все условия (например, проверку 200) при возникновении ошибки. – Nicole

ответ

1

Если вы используете supertest, вам не требуется, чтобы вы запускали приложение в любом порту. Просто добавьте app.listen по запросу supertest

var express = require('express'); 
var app = express(); 
var chai = require('chai'); 
var expect = require('chai').expect; 
var should = require('should'); 
var supertest = require('supertest'); 
var server = supertest.agent("https://localhost:3001"); 
var request = require('supertest'); 
var bodyParser = require('body-parser'); 


//Body parser 
app.use(bodyParser.json()); 
app.use(bodyParser.urlencoded({ extended: false })); 

it("should add report", function(done){ 
request(app.listen()) // change here 
.post('/api/addreport/') 
.send(data) 
.expect(200) 
.end(function(err,res){ 
    done(); 
}); 
}); 
+0

Привет, я обновил свой вопрос. Тем не менее, теперь я получаю ответ от моего сообщения «null» ... не уверен, почему, поскольку api действительно работает в режиме разработки/производства. –

+0

Вы получили какой-либо console.log на стороне сервера? Если не возможно, что у вас есть проблема маршрутизации? если вы проверяете использование приложения типа «Почтальон» или «завиток», есть ли у вас ответ от сервера? –

+0

hi - yes, 'curl --insecure --data '' https: // localhost: 3001/api/addreport' дает мне вывод console.log на стороне сервера –