我试图用Mocha和Supertest测试一个API而没有幸运能让它发挥作用。 我有以下代码:
var supertest = require('supertest');
describe('Routing', function() {
var url = 'http://example.com';
var server = supertest.agent(url);
var credentials = {
user: 'username',
pass: 'password'
};
describe('Login', function() {
it('should login ok given valid credentials', function(done) {
server
.post('/login.php')
.send(credentials)
.end(function(err, res) {
if (err) {
throw err;
}
server.saveCookies(res);
done();
});
});
it('should correctly make an authenticated request', function(done){
server
.get('/api/me/accounts?_=1449865354112')
.end(function(err,res) {
if (err) {
throw err;
}
res.status.should.be.equal(200);
done();
});
});
});
});
登录请求正常,我通过身份验证。第二个电话会抛出401状态。 我阅读了文档,但我无法使用。
有什么问题? 谢谢!
更新
我最后通过使用.field('user', 'myUsername')
和.field('pass', 'myPassword')
发送参数进行身份验证。
此外,我必须在呼叫之间保持cookie:
我通过身份验证时cookie = res.headers['set-cookie'];
,并在下次请求时.set('cookie', cookie)
。
答案 0 :(得分:0)
这是因为你的两个测试之间没有持久化会话(cookie)。
其次我记得我曾经使用superagent在同一服务器的两次调用之间保持会话。但似乎supertest现在暴露代理人来坚持会议。
var supertest = require('supertest');
var app = express();
var agent = supertest.agent(app);
// then you can persist cookie
agent
.post('/login.php')
.auth(credentials)
...
编辑: 这是我如何使用superagent进行测试的一个例子:
var request = require('superagent');
var postData= {
email: 'john@test.com',
password: 'test'
};
var user1 = request.agent();
user1.post('http://localhost:3000/user/login')
.send(postData)
.end(function (err, res) {
expect(err).to.not.exist;
expect(res.status).to.equal(200);
var result = res.body;
expect(result.data.message).to.equal('Login successful');
user1.get('http://localhost:3000/user')
.end(function (err, res) {
expect(err).to.not.exist;
expect(res.status).to.equal(200);
var result = res.body;
expect(result.data.email).to.equal('john@test.com');
done();
});
});
答案 1 :(得分:0)
.send()
适用于您的数据。 .auth()
代表您的凭据。尝试:
it('should login ok given valid credentials', function(done) {
server
.post('/login.php')
.auth(credentials)
.send({"some": "value"})
.expect(200)
.end(function(err, res) {
if (err) {
done(error);
}
server.saveCookies(res);
done();
});
});
有关supertest的更多信息,请参阅http://visionmedia.github.io/superagent/docs/test.html。