Глобальное `до " и " до " для мокко?
сейчас я использую 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 }); }); });
