当前,我正在使用SuperTest来测试API和我需要从管理员用户获取访问令牌的每个请求,因此我创建了此请求(工作正常):
authenticate.js
const request = require('supertest');
var storeAccessToken;
describe ('POST /Authenticate', function() {
it ('Should return access token', function(done) {
request('http://myendpoint.com')
.post('/TokenAuth/Authenticate')
.send({
"username": "admin",
"password": "admin"})
.end(function(err, res) {
if (err) return done(err);
storeAccessToken = res.body.result.accessToken;
done();
});
});
});
现在我已经存储了访问令牌(变量 storeAccessToken ),我需要在另一个 before()中调用相同的代码文件。
getKpiRequest.js
const request = require('supertest');
var storeAccessToken;
describe ('GET /Kpi/Availables', function() {
before(function (done){
request('http://myendpoint.com')
.post('/TokenAuth/Authenticate')
.send({
"username": "admin",
"password": "admin"})
.end(function(err, res) {
if (err) return done(err);
storeAccessToken = res.body.result.accessToken;
assert.equal(res.status, 200);
done();
});
});
});
如何避免在 getKpiRequest.js 文件中重复代码?
答案 0 :(得分:1)
您可以在另一个文件中定义身份验证功能,然后将其导入测试文件中
// common.js
function authenticate() {
return request('http://myendpoint.com')
.post('/TokenAuth/Authenticate')
.send({
"username": "admin",
"password": "admin"})
.then((res) => {
assert.equal(res.status, 200);
return res.body.result.accessToken;
});
}
module.exports = {
authenticate
}
// authenticate.js
const request = require('supertest');
const authenticate = require('./common').authenticate;
var storeAccessToken;
describe ('POST /Authenticate', function() {
it ('Should return access token', function(done) {
authenticate().then((token) => {
storeAccessToken = token;
done();
}).catch(done);
});
});
// getKpiRequest.js
const request = require('supertest');
const authenticate = require('./common').authenticate;
var storeAccessToken;
describe ('GET /Kpi/Availables', function() {
before(function (done){
authenticate()
.then((token) {
storeAccessToken = token;
done();
}).catch(done);
});
});
保持常规功能,以便您可以重复使用