Все мои модульные тесты содержат некоторый общий код, который я могу запустить и абстрагировать в функцию. Однако я хочу иметь возможность повторно использовать значение Core
в каждом тесте
function makeSuite(name, module, callback) {
suite(name, function () {
var Core = {};
setup(function () {
Core = Object.create(core).constructor();
Core.module("name", module);
});
teardown(function () {
Core.destroy();
});
callback(Core);
});
}
makeSuite("Server", server, function (Core) {
test("server creates a server", useTheCore);
test("server listens to a port", useTheCore);
test("server emits express app", useTheCore);
test("server destroys itself", useTheCore);
});
Каждый раз, когда я звоню useTheCore
, я ожидаю, что значение ядра будет другим. Это связано с тем, что определенная библиотека модульных тестов вызывает метод setup
перед каждым test
. Это явно не работает, потому что я передаю {}
обратному вызову по значению. И когда я перезаписываю Core
, он не распространяется.
Один хак, который я могу использовать, это __proto__
для эмуляции прохода по ссылке
function makeSuite(name, module, callback) {
suite(name, function () {
var ref = {};
setup(function () {
var Core = ref.__proto__ = Object.create(core).constructor();
Core.module("name", module);
});
teardown(function () {
ref.__proto__.destroy();
});
callback(ref);
});
}
- Существует ли более элегантный способ эмулировать передачу по ссылке, желательно без использования устаревшего нестандартного
__proto__
- Есть ли более изящное решение для реальной проблемы повторного использования кода, которое у меня есть.