При тестировании базы кода сервера и желании создать покрытие кода с помощью внешнего инструмента, такого как istanbul
, нет смысла запускать и останавливать сервер для каждого набора тестов с помощью before
и after
- особенно если наборов тестов много и сервер при запуске выполняет различные операции.
Я предлагаю добавить возможность настроить функцию setup
для асинхронного вызова перед выполнением любых тестов и функцию teardown
после выполнения всех наборов тестов.
Хотя я прочитал CONTRIBUTING.md и полагаю, что эта функция вряд ли будет принята, поскольку она может быть не обычным вариантом использования, я реализовал, протестировал и интегрировал эту функциональность с реальным проектом, полная информация содержится в (сжатой) фиксации:
https://github.com/socialally/mocha/commit/fd744e480fa4acbc0846cdaa41f866034bdd38ab
Если консенсус состоит в том, что эта функция будет полезна другим людям, и PR будет принят, я сделаю PR со связанным коммитом.
@freeformsystems Об этом уже просили (# 1403); мы пришли к выводу, что это разумные обходные пути.
Причина, по которой мы не принимаем много PR в настоящее время, просто в том, что у нас недостаточно ресурсов для поддержки большего количества кода.
Это может быть удобной функцией, но, если не существует жизнеспособного обходного пути, я не думаю, что она скоро будет объединена. Если вы хотите внести свой вклад, я мог бы использовать комментарии / предложения по # 1457 - как только это будет сделано, вам не понадобится код в ядре Mocha, чтобы это работало для вас.
дело не только в том, что у нас нет ресурсов. это также сделать мокко как можно более простым и маленьким api.
эта функция действительно кажется полезной, но я не исключаю ее.
( @travisjeffery Сохранять простоту Mocha - это здорово, и если мы сможем предоставить пользователям API для сборки, если они _до_ захотят какую-нибудь причудливую функцию, все будут счастливы. Прямо сейчас я вижу много недовольных пользователей, потому что у них нет другого выхода, кроме PR.)
Я открою это заново.
да, у нас есть api, очевидно, лучшее для всех
@boneskull , проверено # 1403. Процессы, порождающие решения до и после, не помогают с охватом моего кода, добавление gulp в стек только для этого кажется ненужным, когда каждая среда тестирования, которую я использовал, имеет эту функцию.
Насколько мне известно, это очень и очень стандартная функциональность для выполнения тестов, и я думаю, что она должна быть включена в мокко (хотя я полностью осознаю, что моя реализация грубая).
Что касается # 1457, я хотел бы помочь, но в данный момент я действительно занят коммерческой работой, однако, немного взглянув на код, мне кажется, что для браузерного средства запуска тестов нет тестов - это правильно? Если это так, то первое, что я сделал бы перед любым рефакторингом, - это улучшил бы набор тестов (интегрировал с кармой) и проверил покрытие кода.
Я немного подумал над рефакторингом плагина и скоро постараюсь добавить несколько комментариев.
Я тоже просил нечто подобное в # 1370. Это было бы здорово - особенно для очистки макетов / заглушек или проверки того, что все ожидания оправдались.
Разве эта функциональность уже не возможна с использованием хуков глобального пакета?
$ cat setup.js
before(function() {
console.log('global setup');
});
after(function() {
console.log('global teardown');
});
$ cat test.js
describe('suite', function() {
it('test', function() {});
});
dstjules:~/git/mocha (master=)
$ mocha test.js setup.js
global setup
․global teardown
1 passing (10ms)
@danielstjules ,
Выглядит неплохо, если работает, я проверю. Интересно, что ваш пример вывода не показывает выполняемый набор тестов ( test.js
)? Принимает ли мокко несколько аргументов [файл], я думаю, что это один шаблон глобуса?
Mocha обрабатывает как глобальные шаблоны, так и явно перечисляет аргументы файла.
Результат выше показывает, что набор тестов выполняется, но я использовал точечный репортер. Обратите внимание на точку перед вторым «глобальным». Вот репортер спецификаций:
$ mocha --reporter spec test.js setup.js
global setup
suite
✓ test
global teardown
1 passing (10ms)
Я думаю, мы могли бы обновить документацию, чтобы сообщить, что это возможно. :)
@danielstjules Я думаю, что видел это там накануне вечером, когда работал над джекиллом.
Вы правы - только что нашел его в разделе асинхронного кода. Возможно, стоит выделить это в другом разделе или где-нибудь в вики.
На данный момент закрытие, так как корневые хуки before()
и after()
похоже, удовлетворяют требованиям. :)
Если я не ошибаюсь, наличие глобального before
/ after
будет вызываться для каждого блока describe
, это правильно? Если да, то как можно запустить что-то один раз до и один раз после запуска всего набора тестов (не для каждого describe
)? Например, подключитесь к базе данных при запуске пакета (и заблокируйте до подключения) и отключитесь после завершения
Если я не ошибаюсь, для каждого блока описания будет вызываться глобальный вызов до / после, это правильно?
Нет, только в начале / конце набора тестов :)
before(function() {
console.log('before');
});
after(function() {
console.log('after');
});
describe('suite1', function() {
it('test', function() {});
});
describe('suite2', function() {
it('test', function() {});
});
suite1
✓ test
suite2
✓ test
after
2 passing (9ms)
извините за некромантию по этому вопросу:
это поведение специфично для интерфейса bdd? используя tdd (загруженный через karma-mocha), я заметил, что установка / удаление на корневом уровне вызывается для каждого набора и каждого теста. Совершенно противоположное тому, что здесь желательно.
редактировать:
после некоторого изучения проблем выясняется, что эквивалентами before
и after
для tdd являются suiteSetup
и suiteTeardown
Разве эта функциональность уже не возможна с использованием хуков глобального пакета?
$ cat setup.js before(function() { console.log('global setup'); }); after(function() { console.log('global teardown'); }); $ cat test.js describe('suite', function() { it('test', function() {}); }); dstjules:~/git/mocha (master=) $ mocha test.js setup.js global setup ․global teardown 1 passing (10ms)
Это работает очень хорошо в большинстве сценариев, кто-нибудь знает, как запустить эти before
и after
хуки в режиме просмотра?
Самый полезный комментарий
Разве эта функциональность уже не возможна с использованием хуков глобального пакета?