Javascript require () файл в тестах несколько раз не создает объект снова - PullRequest
0 голосов
/ 25 февраля 2020

Я пишу несколько тестов для javascript API с мокко. Я docker запустил свой проект перед запуском тестов и понял, что для создания объекта в нескольких тестах требуется файл, например, такой как:

    it('should return false 1', () =>  {
      const testObject = require(./file.json)
      delete testObject.neededAttribute1;
      expect(function(testObject)).to.be.false;
    });

    it('should return false 2', () =>  {
      const testObject = require(./file.json)
      delete testObject.neededAttribute2;
      expect(function(testObject)).to.be.false;
    });

Javascript не создаст объект testObject во втором тесте, но используйте первый с ранее внесенными изменениями, что делает мои тесты непригодными для использования, если я не могу вручную восстановить объект с тем, что я изменил после выполнения теста.

Я понимаю, Javascript делает это более эффективным, не загружая один и тот же файл все время, но только один раз.

Но как мне сделать мои тесты, в которых у меня есть файл с правильным объектом, и я хочу вносить небольшие модификации по одному в каждом тесте?

Есть идеи?

Ответы [ 2 ]

1 голос
/ 25 февраля 2020

клонировать объект.

Импортировать ваш объект в функцию before

https://futurestud.io/tutorials/mocha-global-setup-and-teardown-before-after

Затем в каждой функции или в функции beforeEach, клонировать этот объект с помощью чего-то вроде функции loda sh cloneDeep.

https://lodash.com/docs/4.17.15#cloneDeep

0 голосов
/ 26 февраля 2020

Существует решение, даже более подробное, но оно позволяет избежать клонирования объекта перед каждым тестом, поскольку, возможно, в этом нет необходимости.

describe('Tests', () => {

  const baseTestObject = require('./file.json');

  it('should return false 1', () =>  {
    const testObject = Object.assign({}, baseTestObject, { attribute1: null });
    expect(function(testObject)).to.be.false;
  });

  it('should return false 2', () =>  {
    const testObject = Object.assign({}, baseTestObject, { attribute2: null });
    expect(function(testObject)).to.be.false;
  });

Объединение и клонирование объектов следующим образом

const testObject = Object.assign({}, baseTestObject, { attribute2: null });

Поддерживает исходный объект testObject, поэтому не влияет на другие тесты.

...