Эмуляция передачи по ссылке в JavaScript - PullRequest
1 голос
/ 10 января 2012

Все мои модульные тесты содержат некоторый общий код, который я могу запустить и абстрагировать в функцию. Однако я хочу иметь возможность повторно использовать значение 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__
  • Есть ли более изящное решение для реальной проблемы повторного использования кода, которое у меня есть.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...