如何 运行 在由 angular 全栈生成器生成的经过身份验证的端点中进行超级测试
How to run supertest in authenticated endpoints generated by the angular fullstack generator
我正在尝试使用 supertest 来测试我使用 yeoman angular full stack generator 创建的经过身份验证的点的行为。我尝试使用超级测试文档中描述的简单身份验证,但我仍然收到 404 错误。
端点和测试配置如下:
server/api/thing/index.js
'use strict';
var express = require('express');
var auth = require('../../auth/auth.service');
var controller = require('./thing.controller');
var router = express.Router();
router.get('/', auth.isAuthenticated(), controller.index);
module.exports = router;
fullstack-demo/server/api/thing/thing.spec.js
'use strict';
var should = require('should');
var app = require('../../app');
var request = require('supertest');
var User = require('./user.model');
describe('GET /api/things', function() {
before(function(done) {
//Create user for testing
var user = new User({
provider: 'local',
name: 'Fake User',
email: 'test@test.com',
password: 'test'
});
user.save(function(){done()});
});
it('should respond with JSON array', function(done) {
request(app)
.get('/api/things')
.auth('test@test.com', 'test')
.expect(200)
.expect('Content-Type', /json/)
.end(function(err, res) {
if (err) return done(err);
res.body.should.be.instanceof(Array);
done();
});
});
});
关于如何测试这个端点有什么想法吗?
我认为这些错误可能与我使用 Passport 进行身份验证有关,有什么方法可以根据 Passport 验证超级测试吗?
找到解决方案!我只需要将身份验证令牌指向经过身份验证的端点。
var server = request.agent('http://localhost:9000');
var token = null
describe('GET /api/things', function() {
before(function(done){
User.find({}).remove(function() {
User.create({
provider: 'local',
name: 'Test User',
email: 'test@test.com',
password: 'test'
}, {
provider: 'local',
role: 'admin',
name: 'Admin',
email: 'admin@admin.com',
password: 'admin'
}, function() {
console.log('finished populating users');
server.post('/auth/local')
.send({email:'test@test.com', password:'test'})
.expect(302)
.end(function(err, res){
console.error('ERROR ' + JSON.stringify(err));
console.log('BODY ' + JSON.stringify(res.body));
token = res.body.token;
done();
})
}
);
});
});
it('should respond with JSON array', function(done) {
server.get('/api/things')
.set('Authorization', 'Bearer ' + token)
.expect(200)
.expect('Content-Type', /json/)
.end(function(err, res) {
if (err) return done(err);
res.body.should.be.instanceof(Array);
done();
});
});
});
我正在尝试使用 supertest 来测试我使用 yeoman angular full stack generator 创建的经过身份验证的点的行为。我尝试使用超级测试文档中描述的简单身份验证,但我仍然收到 404 错误。
端点和测试配置如下:
server/api/thing/index.js
'use strict';
var express = require('express');
var auth = require('../../auth/auth.service');
var controller = require('./thing.controller');
var router = express.Router();
router.get('/', auth.isAuthenticated(), controller.index);
module.exports = router;
fullstack-demo/server/api/thing/thing.spec.js
'use strict';
var should = require('should');
var app = require('../../app');
var request = require('supertest');
var User = require('./user.model');
describe('GET /api/things', function() {
before(function(done) {
//Create user for testing
var user = new User({
provider: 'local',
name: 'Fake User',
email: 'test@test.com',
password: 'test'
});
user.save(function(){done()});
});
it('should respond with JSON array', function(done) {
request(app)
.get('/api/things')
.auth('test@test.com', 'test')
.expect(200)
.expect('Content-Type', /json/)
.end(function(err, res) {
if (err) return done(err);
res.body.should.be.instanceof(Array);
done();
});
});
});
关于如何测试这个端点有什么想法吗?
我认为这些错误可能与我使用 Passport 进行身份验证有关,有什么方法可以根据 Passport 验证超级测试吗?
找到解决方案!我只需要将身份验证令牌指向经过身份验证的端点。
var server = request.agent('http://localhost:9000');
var token = null
describe('GET /api/things', function() {
before(function(done){
User.find({}).remove(function() {
User.create({
provider: 'local',
name: 'Test User',
email: 'test@test.com',
password: 'test'
}, {
provider: 'local',
role: 'admin',
name: 'Admin',
email: 'admin@admin.com',
password: 'admin'
}, function() {
console.log('finished populating users');
server.post('/auth/local')
.send({email:'test@test.com', password:'test'})
.expect(302)
.end(function(err, res){
console.error('ERROR ' + JSON.stringify(err));
console.log('BODY ' + JSON.stringify(res.body));
token = res.body.token;
done();
})
}
);
});
});
it('should respond with JSON array', function(done) {
server.get('/api/things')
.set('Authorization', 'Bearer ' + token)
.expect(200)
.expect('Content-Type', /json/)
.end(function(err, res) {
if (err) return done(err);
res.body.should.be.instanceof(Array);
done();
});
});
});