Как получить доступ к свойствам класса Jest Test Environment внутри дочернего теста? - PullRequest
0 голосов
/ 06 февраля 2019

Я создал тестовую среду для шуток.Он очень близко основан на их официальных документах .

. Я устанавливаю несколько значений в конструкторе, которые я хотел бы сделать доступными для тестов, которые используются в среде.(См. 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 будет в области видимости), но безуспешно.

Как я могу получить свойства класса из моей среды тестирования из моих тестов в этой среде?

1 Ответ

0 голосов
/ 06 февраля 2019

К сожалению, вы не можете.Я бы порекомендовал выставить foo аналогично 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 
  });
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...