Meine APIs verwendet werden können nach der Anmeldung. Zum Beispiel /api/sales
eine Authentifizierung wie unten Code erfordert. (Ich verwende Node.js und Express.js)Mokka Testing authentifizierte von einem Server bereitgestellt APIs
app.all('/api/*', userController.requiresLogin);
app.route('/api/sales')
.get(common.readAll(Sale, 'name'))
.post(common.create(Sale));
Die userController.requiresLogin
Funktion ist:
exports.requiresLogin = function(req, res, next) {
console.log('Check login...');
if(!req.user) return res.status(401).send();
else next();
};
anzumelden, verwende ich passport.js
.
Wenn ich meinen Server ausführen und diese API in meinem Browser testen, funktioniert es.
Um diese API automatisch zu testen, habe ich meinen Mokka-Testcode mit Supertest erstellt.
var request = require('supertest'),
should = require('should'),
utils = require('./../utils'),
mongoose = require('mongoose');
var Sale = mongoose.model('Sale'),
User = mongoose.model('User');
var user;
describe('Controller Testing:', function() {
describe('Sale Controller Testing:', function() {
var agent = request.agent();
beforeEach(function(done) {
user = new User({
username:'[email protected]',
password: 1234,
userId: 'default user'
});
user.save();
request(app).post('/login')
.send({username: '[email protected]', password: '1234'})
.end(function(err, res) {
should.not.exist(err);
agent.saveCookies(res);
done();
});
});
afterEach(function() {
User.remove({}, function(){});
Sale.remove({}, function(){});
}
it('create a sale', function(done) {
var sale = {
name: 'New Sale',
orders: [order1]
};
var req = request(app).post('/api/sales')
.send(sale)
.expect('Content-Type', /json/)
.expect(200);
agent.attachCookies(req);
req.end(function(err, res) {
console.log(res.statusCode);
res.body.name.should.equal('New Sale');
done();
});
});
}
Dieser Test gescheitert hält. Der Test "Verkauf erstellen" kann nicht erkennen, dass sich ein Benutzer angemeldet hat, obwohl ich entsprechende Cookies gespeichert und angehängt habe.
Ihre Revision funktioniert! Vielen Dank! Das Problem scheint zu sein, dass mein ursprünglicher Code separate "request (app)" statt des gleichen "agents" macht. – byron1st