如何在子测试中访问Jest测试环境的类属性?

时间:2019-02-06 00:51:30

标签: javascript jestjs

我为开玩笑创建了一个测试环境。它非常接近their official docs

我正在构造函数中设置一些值,这些值可以提供给环境中使用的测试使用。 (请参见this.foo = bar)。

测试环境:

// my-custom-environment
const NodeEnvironment = require('jest-environment-node');

class CustomEnvironment extends NodeEnvironment {
  constructor(config, context) {
    super(config, context);
    this.testPath = context.testPath;
    this.foo = 'bar'; // Trying to access
  }

  async setup() {
    await super.setup();
    await someSetupTasks(this.testPath);
    this.global.someGlobalObject = createGlobalObject();
  }

  async teardown() {
    this.global.someGlobalObject = destroyGlobalObject();
    await someTeardownTasks();
    await super.teardown();
  }

  runScript(script) {
    return super.runScript(script);
  }
}

module.exports = CustomEnvironment;

我使用以下等效项运行测试:

jest --env ./tests/<testing-env>.js

在此测试环境中进行测试的测试中,我在哪里可以访问this.foo

describe('Sample Test', () => {
  it('this.foo = bar', () => {
    expect(this.foo).toBe('bar');
  });
});

我尝试用es5函数格式替换两个箭头函数(希望this在范围内)并且没有任何运气。

如何从测试环境中的测试环境中获取类属性?

2 个答案:

答案 0 :(得分:2)

不幸的是,你不能。我建议以与this.global.someGlobalObject = createGlobalObject();类似的方式公开this.global.foo = 'bar',并在setup函数内添加foo。然后,您可以通过调用// my-custom-environment const NodeEnvironment = require('jest-environment-node'); class CustomEnvironment extends NodeEnvironment { constructor(config, context) { super(config, context); this.testPath = context.testPath; } async setup() { await super.setup(); await someSetupTasks(this.testPath); this.global.someGlobalObject = createGlobalObject(); this.global.foo = 'bar'; // <-- will make foo global in your tests } async teardown() { this.global.someGlobalObject = destroyGlobalObject(); await someTeardownTasks(); await super.teardown(); } runScript(script) { return super.runScript(script); } } module.exports = CustomEnvironment; 在测试套件中访问此变量。

// test suite
describe('Sample Test', () => {
  it('foo = bar', () => {
    expect(foo).toBe('bar'); // <-- foo since it's globally accessible 
  });
});

然后在您的测试套件中:

join()

答案 1 :(得分:0)

另一种可能的解决方案是在您的构造函数中添加一个set函数。

Frame

也许为setThis(key, val) { if (process.env.TEST) this[key] = val }

构建相同的对象