2012-05-12 2 views
46

Я использую mocha для модульного тестирования javascript.Глобальные `before` и` beforeEach` для мокко?

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

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

ответ

26

Объявление 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' 
+0

вы можете немного объяснить, что там происходит? – Gobliins

64

В корне папки тестовой, создать глобальный тест помощника test/helper.js который имеет ваш до и beforeEach

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

// setup 
before(); 
beforeEach(); 

// teardown 
after(); 
afterEach(); 
+8

Вам не нужно требовать его явно. Фактически, это вызовет ошибку, потому что до, beforeEach и т. Д. Не будет существовать в требуемом контексте. Пока он включен в тестовый каталог, код должен быть выполнен до любого из тестов. – khoomeister

+1

спасибо @khoomeister, что было для старой версии! updated – AJcodez

+1

Я использую это, очень приятно, но мне интересно, где найти документы на нем? – Zlatko

-1

Использование модулей может облегчить глобальную настройку/отключение для ваш тестовый набор. Ниже приведен пример использования 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 бегуна (входит в мокко HTML-бегуна, а другой ЛИЭС и тестовые файлы, как <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 
    }); 
    }); 
}); 
Смежные вопросы