Экспортируйте переменную, которая уникальна только при первом обращении к ней

#javascript #node.js #nightwatch.js #browserstack

#javascript #node.js #nightwatch.js #browserstack

Вопрос:

В некотором контексте я пытаюсь создать глобальную переменную, которая устанавливается один раз с помощью Math.random().toString(36).slice(2); или аналогично, однако всякий раз, когда на нее ссылаются снова, она не генерирует новую случайную строку, а возвращает уже сгенерированную случайную строку.

Однако в parallel.conf.js а затем в runner.js У меня есть две разные струны. Я попробовал логику if localIdentifier is undefined генерировать случайную строку, а if not возвращать уже сгенерированную строку, ссылаясь на то, куда она была вставлена.

Я добавил конфигурацию, которую я настроил для nightwatch browserstack для контекста, но не думаю, что это должно иметь значение. Если неясно, дайте мне знать, и я могу предоставить больше контекста.

 parallel.conf.js

let localIdentifier;

let defineLocalIdentifier = (function(){
    if (localIdentifier === 'undefined') {
        localIdentifier = nightwatch_config.common_capabilities["browserstack.localIdentifier"];
        return localIdentifier;
    } else {
        localIdentifier = Math.random().toString(36).slice(2);
        return localIdentifier;
    }
})();

nightwatch_config = {
common_capabilities: {
        'browserstack.user': <user>,
        'browserstack.key': <key>,
        'browserstack.tunnel': true,
        'browserstack.localIdentifier': defineLocalIdentifier,
        'browserstack.local': true,
        'name': 'Bstack-[Nightwatch] Parallel Test',
        acceptInsecureCerts: true,
        javascriptEnabled: true,
        acceptSslCerts: true,
    }

module.exports = nightwatch_config;
module.exports.bs = {
    localIdentifier : defineLocalIdentifier
}

  
 runner.js

const nightwatchConfig = require('./parallel.conf').bs.localIdentifier;

function BrowserStack () {
const browserStackArgs = {
            key: apiKey,
            'force': 'true',
            'forceLocal': 'true',
            'verbose': 'true',
            'localIdentifier': nightwatchConfig
        };


  

Комментарии:

1. Честно говоря, здесь много избыточной логики. Дело в том, что узел кэширует require результаты, поэтому не должно быть необходимости проверять это значение, как вы это делали; и эта проверка (если вы скопировали ее как есть) в любом случае неверна, поскольку undefined !== 'undefined'

2. Не могли бы вы добавить в код точные способы проверки localIdentifier значений? Полагаю, ответа на прямой вопрос module.exports = Math.random().toString(36).slice(2); должно быть достаточно.

3. Вы пробовали ведение журнала консоли внутри оператора else, чтобы узнать, достигли ли вы хотя бы этой точки? почему defineLocalIdentifier является функцией, вызываемой самостоятельно?