#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 является функцией, вызываемой самостоятельно?