Мокко работает несколько 'его' в серии - PullRequest
0 голосов
/ 13 марта 2019

Я бы хотел провести серию тестов, основанных на данных, использованных в предыдущих тестах.

Как это может быть достигнуто с помощью чего-то похожего на:

describe(``,()=>{
    let t = true;
    it(`test1`,()=>assert(t));
    t = false;
    it(`test2`,()=>assert(!t));
});

, который завершается неудачно, потому что строка 3 выполняется после строки 4.

1 Ответ

1 голос
/ 13 марта 2019

Не рекомендуется ставить тесты в зависимости от состояния, заданного другими тестами. По мере усложнения набора тестов чрезвычайно полезно иметь возможность использовать Моккоgrep или иметь возможность временно использовать it.only, чтобы в случае неудачного теста вы могли сконцентрироваться на выполнении только этого теста .Однако, если ваш тест зависит от других тестов, выполняемых перед ним для правильной работы, вы не можете изолировать его.Если вы зайдете в отладчик и установите точку останова на строке, которая будет срабатывать десятки раз перед тем, как вам нужен настоящий тест, это быстро устареет.

В примере кода, который вы показываете, вы можете сделать:

describe(``,()=>{
    let t = true;
    it(`test1`,()=>assert(t));
    it(`test2`,() => {
      t = false; // Set the state here.
      assert(!t);
    });
});

В комментарии Ник предложил установить t в test1.Я предлагаю установить его в test2.С кодом, который я предлагаю выше, вы можете запустить mocha --grep test2 или временно изменить it(`test2`... на it.only(`test2`..., и ваш тест будет работать нормально.

Однако я подозреваю, что ваш реальный код более сложный, чем примервы дали и, возможно, используете какой-то значимый код для установки состояния ваших тестов.Если вы хотите отделить код настройки теста от самого теста, вы можете сделать это:

describe(``,() => {
    describe("", () => {
      let t;
      before(() => {
        t = someSubtantialInitialization();
      });

      it(`test1`, () => ...);
    });

    describe("", () => {
      let t;
      before(() => {
        t = someOtherSubstantialInitialization();
      });

      it(`test2`,() => ...);
    });
});

Mocha имеет before и beforeEach ловушки, но не имеет beforeJustThisOneTest ловушки.Вы можете связать хук с одним тестом, поместив тест и хук в отдельный блок describe.

...