摩卡测试中的共享功能

shared functionality in mocha tests

我将以下代码放在它自己的文件中,名为 shared.js

afterEach(function () {
  // insert code 
});

var foo;

beforeEach(function () {
  foo = {
    bar: []
  };
});

exports = module.exports = {};
exports.foo = foo;

我希望 afterEachbeforeEach 在我的每个 mocha.js 测试中都是 运行。所以在每个测试文件中,我需要 shared.js.

问题是 foo 在我的测试范围内似乎不可用。 foo.bar 未定义且不可访问。 beforeEach()afterEach 挂钩 运行 很好,但我无法理解如何正确导出 foo 的范围。这可能更像是一个 Node.js 问题,而不是实际的 Mocha 问题。

问题是您无法修改导出的引用。在您的情况下,您正在导出 undefined,因为 foo 未初始化。如果您使用空对象初始化 foo,然后尝试将其重新分配给另一个 thing/object,它仍然无法工作,因为导出的引用仍然相同。

您唯一能做的就是像这样修改(变异)导出的对象:

afterEach(function () {
  // insert code 
});

var foo = {};

beforeEach(function () {
  foo.bar = [];
});

exports = module.exports = {};
exports.foo = foo;

如果您想要特定于每个测试上下文的内容,您可以执行以下操作:

afterEach(function () {
  // insert code 
});

beforeEach(function () {
  this.foo = [];
});

exports = module.exports = {};

然后每个测试都可以访问自己的 this.foo:

describe('myTest', function() {
  it('should do something', function() {
    this.foo.push("1"); // same 'this' as from beforeEach
    // ...insert code
  })
})