2016-06-06 3 views
1

Я пишу некоторый тест в nightwatch и имею файл globals.js, который буквально экспортирует объект js ниже.Работа с global.js в nightwatch js

var self = module.exports = { 
    environment: undefined, 
    beforeEach: function (browser, done) { 
     browser.execute(function(data) { 
      return window.navigator.userAgent; 
     }, [], function(result) { 
      self.environment = result.value; 
      console.log("Run against: " + self.environment); 
      done(); 
     }); 
     console.log('the new env is', self.environment); 
    }, 
}; 

Примечание: console.log("Run against: " + self.environment); печатает мой ENV значение, которое не неопределенные в этом случае. Однако. Когда когда-либо я пытаюсь получить доступ к среде из другого файла/класса. Он возвращает значение по умолчанию undefined, несмотря на то, что я обновил его ранее. Пример из приведенного ниже теста.

module.exports = { 
    tags: ['assetindex'], 
    'visit': function(browser) { 

     console.log('the environment is', browser.globals.environment); 
     (/Chrome/.test(browser.globals.environment)) ? 
      browser 
       .page.assetindex().mobileVisit() 
       .end() 
     : 
      browser 
       .page.assetindex().desktopVisit() 
       .end() 
    } 
}; 

browser.globals.environment всегда возвращались неопределенными здесь, несмотря на то, что я изменил его в моей функции beforeEach. Как мне это достичь? Что я делаю не так ?

ответ

1

Кажется, что browser.globals является копией globals.js. Я хотел бы заменить self.environment с browser.globals.environment в beforeEach:

module.exports = { 
    environment: undefined, 

    beforeEach: function (browser, done) { 
     browser.execute(function(data) { 
      return window.navigator.userAgent; 
     }, [], function(result) { 
      browser.globals.environment = result.value; 
      console.log("Run against: " + browser.globals.environment); 
      done(); 
     }); 
    } 
}; 
+0

B. Есть ли способ, которым я могу архивировать это в 'before' not' beforeEach'. Я заметил, что мне не нужно повторять один и тот же тест все время, и я могу просто пропустить с ним раньше. Я понимаю, прежде чем получить другой параметр, и браузер не один. Пожалуйста, как я могу это сделать раньше? Любая помощь будет оценена по достоинству. –

+0

Не уверен, что вы можете сделать это до начала. Вы можете пропустить 'browser.execute' в' beforeEach', если «среда» уже определена. –

+0

oic, Не могли бы вы привести пример с пропуском?. Я возвращаю null или помещаю browser.exec в блок if? –