Глобальное `до " и " до " для мокко?


сейчас я использую mocha для модульного тестирования javascript.

у меня есть несколько тестовых файлов, каждый файл имеет before и beforeEach, но они точно такие же.

как я могу обеспечить глобальный before и beforeEach для всех (или некоторых из них)?

4 51

4 ответа:

объявления before или beforeEach в отдельном файле (я использую spec_helper.coffee) и требуют его.

spec_helper.кофе

afterEach (done) ->
  async.parallel [
    (cb) -> Listing.remove {}, cb
    (cb) -> Server.remove {}, cb
  ], ->
    done()

test_something.кофе

require './spec_helper'

в корне тестовой папки создайте глобальный помощник по тестированию test/helper.js что есть перед и после каждого

// globals
global.assert = require('assert');

// setup
before();
beforeEach();

// teardown
after();
afterEach();

С документация мокко...

КРЮЧКИ КОРНЕВОГО УРОВНЯ

вы также можете выбрать любой файл и добавить крючки уровня "root". Например, добавьте beforeEach() вне всех блоков описания (). Это приведет к обратный вызов функции beforeEach () для выполнения перед любым тестовым случаем, независимо от файл, в котором он живет (это потому, что Мокко имеет подразумеваемое описание() блок, называемый " root suite

все регулярные describe() - suites сначала собираются и только затем run, это своего рода гарантирует, что это называется первым.

'use strict'
let run = false

beforeEach(function() {
    if ( run === true ) return
    console.log('GLOBAL ############################')
    run = true
});

удалите run-флаг, если вы хотите, чтобы он запускался каждый раз, перед каждым тестом.

я назвал этот файл test/_beforeAll.test.js. Он не должен быть импортирован / требуется в любом месте, но .test. (респ. .spec.) в имени файла важен, так что ваш testrunner подхватывает его...


С помощью мокко.ops \o/

если есть вещи, вы действительно хотят только настроить один раз перед запуском тестов (независимо от того, какие...),mocha.opts - Это удивительно элегантный вариант! – Просто добавьте require в ваш файл (да, даже если он мало способствует мокко, а скорее вашей тестовой установке). Он будет работать надежно один раз раньше:

enter image description here

(в этом примере я обнаруживаю, если один тест или много тестов собираются запустить. В первом случае я выводил каждый log.info(), в последнем случае журнал utils будет ведите себя менее многословно. )

использование модулей может облегчить глобальную настройку / демонтаж для вашего набора тестов. Вот пример использования RequireJS (AMD modules):

во-первых, давайте определим тестовую среду с нашей глобальной установки/сброса:

// test-env.js

define('test-env', [], function() {
  // One can store globals, which will be available within the
  // whole test suite.
  var my_global = true;

  before(function() {
    // global setup
  });
  return after(function() {
    // global teardown
  });
});

в нашем JS runner (входит в HTML runner mocha, наряду с другими библиотеками и тестовыми файлами, как <script type="text/javascript">…</script>, или лучше, как внешний файл JS):

require([
          // this is the important thing: require the test-env dependency first
          'test-env',

          // then, require the specs
          'some-test-file'
        ], function() {

  mocha.run();
});

some-test-file.js может быть реализовано следующим образом:

// some-test-file.js

define(['unit-under-test'], function(UnitUnderTest) {
  return describe('Some unit under test', function() {
    before(function() {
      // locally "global" setup
    });

    beforeEach(function() {
    });

    afterEach(function() {
    });

    after(function() {
      // locally "global" teardown
    });

    it('exists', function() {
      // let's specify the unit under test
    });
  });
});