javascript - MochaJS - 在其他文件中重用块
问题描述
目前我正在使用 SuperTest 来测试一个 API,并且对于每个请求我需要从管理员用户那里获取访问令牌,所以我创建了这个请求(工作正常):
验证.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文件中的代码?
解决方案
您可以在另一个文件中定义身份验证功能,然后将其导入测试文件
// 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);
});
});
保持函数通用,以便您可以重用它
推荐阅读
- python - 如何解决scrapy中的scrapy.downloadermiddlewares.redirect错误?
- php - 如果数组再次调用函数
- java - 如何修复错误创建名为“requestMappingHandlerAdapter”的bean
- java - 如何在 Linux 上通过 JFX 窗格组件使用 JavaFX 多点触控事件
- laravel - 如果用户名或电子邮件为空,则停止 Laravel 密码验证
- node.js - Repl.it 程序在 readline 之前终止
- ios - 是否可以加载所有 ios CPU 内核?
- javascript - 有没有办法检查用户是否可以使用 Javascript 解析某个主机名?
- opencv - 无法在 respberry pi 4 上使用 opencv4.1.0-openvino 打开 ip 摄像头
- voiceover - Apple Notes 颜色选择器中的 # 是什么?(UIAccessibility - 旁白)