Слияние крючков в кунитеJavascript

Форум по Javascript
Ответить
Anonymous
 Слияние крючков в куните

Сообщение Anonymous »

Мне нужно повторно использовать наборы настройки и логики очистки в нескольких модулях QUNIT без дупликации кода. Эти части логики уже кодируются как объекты «модуля» в соответствии с API QUNIT. Некоторые из крючков могут быть асинхронными . Вот пример-содержание этих крючков на самом деле ничего не значит, это просто для демонстрации.

Код: Выделить всё

const fruitHook = {
async before () {
this.banana = { ripeness: await generateRandomInitialRipeness() };
this.apple = { ripeness: await generateRandomInitialRipeness() };
},

beforeEach () {
this.banana.ripeness += 1;
this.apple.ripeness += 1;
}
};

const nutHook = {
before () {
this.walnut = { cracked: false };
this.peanut = { cracked: false };
}
};
< /code>
Я хотел бы объединить эти крючки по-разному, как это необходимо для моих модулей QUNIT.// This module needs the fruitHook
QUnit.module('TestFruits', fruitHook);

// This module needs the nutHook
QUnit.module('TestNuts', nutHook);

// This module needs both
QUnit.module('TestFruitsAndNuts', /* ??? */);
< /code>
В реальном случае использования у меня был бы больший набор крючков, которые необходимо объединить в различные подмножества. Предлагает ли QUNIT способ объединить эти крючки?function concatenateHooks (hooks) {
const resultingHook = {
async before () {
for (const hook of hooks) {
if (typeof hook.before === 'function') {
hook.before && await hook.before.call(this);
}
}
},

async beforeEach () { /* ... */ }

async afterEach () { /* ... */ }

async after () { /* ... */ }
}
}
< /code>
и используйте его так: < /p>
QUnit.module('TestFruitsAndNuts', concatenateHooks([fruitHook, nutHook]);
В моей реализации я заставляю всех крючков стать асинк , хотя я подозреваю, что могу сделать немного более сложным, чтобы избежать ожидания, если все прошедшие крючки синхронно.>

Подробнее здесь: https://stackoverflow.com/questions/794 ... s-in-qunit
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Javascript»