首页 > 解决方案 > 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文件中的代码?

标签: javascriptmocha.jssupertest

解决方案


您可以在另一个文件中定义身份验证功能,然后将其导入测试文件

// 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);
    });
});

保持函数通用,以便您可以重用它


推荐阅读