Mocha: Предложение функции: глобальная настройка и демонтаж

Созданный на 3 дек. 2014  ·  16Комментарии  ·  Источник: mochajs/mocha

При тестировании базы кода сервера и желании создать покрытие кода с помощью внешнего инструмента, такого как istanbul , нет смысла запускать и останавливать сервер для каждого набора тестов с помощью before и after - особенно если наборов тестов много и сервер при запуске выполняет различные операции.

Я предлагаю добавить возможность настроить функцию setup для асинхронного вызова перед выполнением любых тестов и функцию teardown после выполнения всех наборов тестов.

Хотя я прочитал CONTRIBUTING.md и полагаю, что эта функция вряд ли будет принята, поскольку она может быть не обычным вариантом использования, я реализовал, протестировал и интегрировал эту функциональность с реальным проектом, полная информация содержится в (сжатой) фиксации:

https://github.com/socialally/mocha/commit/fd744e480fa4acbc0846cdaa41f866034bdd38ab

Если консенсус состоит в том, что эта функция будет полезна другим людям, и PR будет принят, я сделаю PR со связанным коммитом.

Самый полезный комментарий

Разве эта функциональность уже не возможна с использованием хуков глобального пакета?

$ 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)

Все 16 Комментарий

@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 Я думаю, что видел это там накануне вечером, когда работал над джекиллом.

screen shot 2015-04-18 at 10 51 25 am

Вы правы - только что нашел его в разделе асинхронного кода. Возможно, стоит выделить это в другом разделе или где-нибудь в вики.

На данный момент закрытие, так как корневые хуки 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 хуки в режиме просмотра?

Была ли эта страница полезной?
0 / 5 - 0 рейтинги