我正在尝试进行API测试。为此,我创建了一个代码来触发POST API,然后生成测试结果。为此,我使用Mocha.js测试框架,并希望使用SuperAgent库来触发API并获得响应。
Here is the code:
var assert = require("assert");
var superagent = require("superagent");
var should = require("should");
var expect = require('expect');
var chai = require('chai');
var chaiHttp = require('chai-http');
var request=require('request');
describe('creating an Incident', function() {
it('should pass the parameters needed for creating an Incident', function(done) {
superagent
.post('http://localhost:9001/incident/create' )
.send({user: 'user123',password: 'pass123'}) //authorization details
.set('Accept', 'application/json') //headers
.set('Content-Type', 'application/json') //headers
.send({ Name:'MyIncident', orderId:'12340508'}) //JSON parameters to be passed for creating an incident.
.end(function(err, res) {
expect(200,done); //Status code
if (err) {
throw err;
}
else {
res.should.have.status(400);
done();
}
});
});
});
现在,问题是在命令提示符下运行此代码时,我收到此错误。请看看。
请提出我需要在此计划中进行的更改。 在此先感谢:)
答案 0 :(得分:0)
这取决于您在服务器端代码中实现身份验证的方式。我在passport及其本地策略的帮助下实现了类似的东西,这需要持久的登录会话。 出于测试目的,我使用supertest和supertest-session在before hook中创建有效的用户会话。来自supertest-session文档的一些例子:
var session = require('supertest-session');
var myApp = require('../../path/to/app');
var testSession = null;
beforeEach(function () {
testSession = session(myApp);
});
it('should fail accessing a restricted page', function (done) {
testSession.get('/restricted')
.expect(401)
.end(done)
});
it('should sign in', function (done) {
testSession.post('/signin')
.send({ username: 'foo', password: 'password' })
.expect(200)
.end(done);
});
it('should get a restricted page', function (done) {
testSession.get('/restricted')
.expect(200)
.end(done)
});