【问题标题】:MochaJS - Reuse block in other filesMochaJS - 在其他文件中重用块
【发布时间】:2018-08-14 04:52:26
【问题描述】:

目前我正在使用 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文件中的代码?

【问题讨论】:

    标签: javascript mocha.js supertest


    【解决方案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);
        });
    });
    

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-11-19
      相关资源
      最近更新 更多