首页 > 解决方案 > Mocha 测试中的导出变量

问题描述

为了阐明我正在尝试做的事情是:运行下面的测试后,我得到了report.json生成的令牌和我在 before 钩子中生成的令牌,并将报告发送到另一个 api 以供其处理。

我有一个 mocha 测试,在该测试中我生成了一个令牌,我需要生成这个令牌才能与另一个 js 文件共享。

var token = 'un_assigned';

describe('Comparison', function () {
  token = 'sin asignar';
  before(function (done) {
    getToken('app', function (response) {
      token = response.token;
      done();
    })
  });

  files.forEach(function (file) {
    it('Comparing ' + file, function (done) {
      const id = file.split('./screenshots/')[1];
      compare(file, id, token, function (response) {
        expect(response.TestPassed).to.be.true;
        done();
      });
    });
  });

  after(function (done) {
    done();

  })
});


exports.tokenApi = function getToken(){
  console.log(token);
  return token;
};

运行测试后,我需要将生成令牌传递给另一个 JS 文件,以便处理 mocha 报告。我尝试使用导出,但是当我调用我的函数时,它会调用我的测试。我是一个 JS 菜鸟,我有什么遗漏吗?

标签: node.jsmocha.js

解决方案


使用文件系统(推荐)

使用fs模块将令牌写入文件,然后根据需要读取此令牌。

const fs = require('fs')
    exports.tokenApi = function getToken(){
      console.log(token);
     // write token to file here
      fs.writeFile('token.txt', token, (err) => console.error(err))
      return token;
    };

或者使用节点模块语法

除了没有正确导出模块之外,您已经很接近了,您必须使用节点模块语法

tokenApi = function getToken(){
  console.log(token);
  return token;
};
module.exports=tokenApi

但是,第二种方法不适用于您的示例,因为只有在测试运行后才会设置令牌。

此外,除非您打算运行测试,否则不应导入测试套件,因为标准 javascript 文件将不了解 mocha 命令。


推荐阅读