Вопрос по javascript – Глобальные `before` и` beforeEach` для мокко?

58

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

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

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

Ваш Ответ

4   ответа
24

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

spec_helper.coffee

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

test_something.coffee

require './spec_helper'
Error: User Rate Limit Exceeded
74

test/helper.js который имеет ваш before и beforeEach

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

// setup
before();
beforeEach();

// teardown
after();
afterEach();
Error: User Rate Limit Exceeded
Error: User Rate Limit Exceededthis section, bottom part.
Error: User Rate Limit Exceeded
Error: User Rate Limit Exceeded
Error: User Rate Limit Exceededmochajs.org/#root-level-hooks
-2

для вашего набора тестов. Вот пример использования RequireJS (модули AMD):

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

// 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 Moner, вместе с другими библиотеками и тестовыми файлами, в качестве<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
    });
  });
});
18

мокко документация& # X2026;

ROOT-LEVEL HOOKS

You may also pick any file and add “root”-level hooks. For example, add beforeEach() outside of all describe() blocks. This will cause the callback to beforeEach() to run before any test case, regardless of the file it lives in (this is because Mocha has an implied describe() block, called the “root suite

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

'use strict'
let run = false

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

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

Я назвал эт файлtest/_beforeAll.test.js, Это не нужно нигде импортировать / требовать, но.test. (Сов..spec.) в имени файла важно, чтобы ваш тестраннер поднял его & # x2026;

bonus track 8-): using mocha.opts \o/

Если есть что-то, вы действительно хите настроить только один раз перед запуском ваших тестов (независимо того, какие из них ...),mocha.opts это удивительно элегантный вариант! & # X2013; Просто добавьтеrequire к вашему файлу (да, даже если он мало способствует мокко, а скорее к вашей настройке теста). Он будет надежно рабать один раз перед:

enter image description here

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

Update:

Если кто-то знает способ, чтобы получить доступ к некорым основным свойствам пакета мокко, корый собирается запустить вonce.jsЯ хел бы знать и добавить сюда. (т.е. мойsuiteMode-обнаружение паршиво, если был другой способ определить, сколько тестов нужно запустить & # x2026;)

Error: User Rate Limit Exceeded

Похожие вопросы