Глобальное `до " и " до " для мокко?
сейчас я использую mocha для модульного тестирования javascript.
у меня есть несколько тестовых файлов, каждый файл имеет before
и beforeEach
, но они точно такие же.
как я могу обеспечить глобальный before
и beforeEach
для всех (или некоторых из них)?
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
в ваш файл (да, даже если он мало способствует мокко, а скорее вашей тестовой установке). Он будет работать надежно один раз раньше:(в этом примере я обнаруживаю, если один тест или много тестов собираются запустить. В первом случае я выводил каждый
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 }); }); });