2016-09-28 214 views
1

我有以下的package.json:如何設置黃瓜環境變量

{ 
    "name": "newcucumber", 
    "version": "1.0.0", 
    "main": "index.js", 
    "scripts": { 
    "test": "./node_modules/.bin/cucumber-js", 
    "firefox": "./node_modules/.bin/cucumber-js -- --profile.desktop.env.browser ff" 
    }, 
    "author": "", 
    "license": "ISC", 
    "dependencies": { 
    "chromedriver": "^2.24.1", 
    "cucumber": "^1.3.0", 
    "firefox-profile": "^0.4.2", 
    "geckodriver": "^1.1.2", 
    "phantomjs-prebuilt": "^2.1.12", 
    "selenium-webdriver": "^3.0.0-beta-2" 
    } 
} 

我使用運行該程序:

npm test 

我想設置爲黃瓜的環境變量,例如我可以從命令行運行:npm test firefoxnpm test phantomjs

它也可以作爲package.json'腳本'的一部分,如上所示,但我不確定我是否做得對。調用npm run-script firefox

如何實現它,以便在js代碼中,像world.js或browser.js,我抓住env變量?

回答

1

再次,現在我已經得到了我想要使用的答案:

這是package.json(MIND !!!引號的語法)如下所示:

"scripts": { 
    "test": "cucumber-js", 
    "firefox": "cucumber-js --world-parameters '{\"browser\":\"firefox\"}'", 
    "chrome": "cucumber-js --world-parameters '{\"browser\":\"chrome\"}'", 
    "safari": "cucumber-js --world-parameters '{\"browser\":\"safari\"}'", 
    "phantomjs": "cucumber-js --world-parameters '{\"browser\":\"phantomjs\"}'" 
    } 

將JSON對象傳遞給World。在你的世界。JS代碼如下所示:

module.exports = function() { 
    this.World = function(input) { 
    console.log(input.browser); // Do whatever you want with the JSON (input) object 
    }; 
}; 
0

當你想要定義env變量時,你可以做類似的事情。順便說一句,這不是強制性的添加整個路徑,NPM會弄明白

{ 
    "name": "newcucumber", 
    "version": "1.0.0", 
    "main": "index.js", 
    "scripts": { 
    "test": "cucumber-js", 
    "firefox": "NODE_ENV=test cucumber-js -- --profile.desktop.env.browser ff" 
    }, 
    "author": "", 
    "license": "ISC", 
    "dependencies": { 
    "chromedriver": "^2.24.1", 
    "cucumber": "^1.3.0", 
    "firefox-profile": "^0.4.2", 
    "geckodriver": "^1.1.2", 
    "phantomjs-prebuilt": "^2.1.12", 
    "selenium-webdriver": "^3.0.0-beta-2" 
    } 
} 
+0

當我與你的建議運行,以下是打印出來: '> NODE_ENV =測試黃瓜JS - --profile.desktop.env.browser FF fs.js:1574 return binding.realpath(pathModule._makeLong(path),options.encoding); 錯誤:ENOENT:在錯誤沒有這樣的文件或目錄,真實路徑 '--profile.desktop.env.browser' (原生) 在Object.realpathSync(fs.js:1574:18)' – 6axter82

0

我還沒有嘗試過自己,但根據黃瓜的CLI文檔,有將數據傳遞到世界的方式構造函數(World parameters,頁尾)

您可以將瀏覽器傳遞給World構造函數,並讓它根據您的選擇創建webdriver實例。

我想在你的package.json腳本部分可能是(或多或少)如下:

"scripts": { 
    "test": "cucumber-js", 
    "firefox": "./node_modules/.bin/cucumber-js --world-parameters <JSON>" 
    } 

其中<JSON>將包含的信息。關於瀏覽器類型等。希望它有幫助。

0

我決定不改變node_modules或其他任何東西,導致下一個npm update <package>後的改變將會丟失。

的想法是設置環境變量:

  1. 在你打電話npm test目錄中創建一個start.sh文件。
  2. 寫在start.sh

    #!/bin/bash 
    export BROWSER=$1 
    npm test 
    
  3. 裏面你browser.js或文件,你打電話給你的瀏覽器中鍵入:

    var chrome = require('chromedriver'), 
    phantom = require('phantomjs-prebuilt'), 
    firefox = require('selenium-webdriver/firefox'), 
    webdriver = require('selenium-webdriver'); 
    ... 
    
    console.log("What was passed into global env: ", process.env.BROWSER); 
    switch(process.env.BROWSER) { 
        case 'firefox':        //Setup Firefox 
         var capabilities = { 
          'browserName' : 'firefox' 
         } 
         break; 
        case 'phantomjs': 
         var capabilities = { 
          'browserName' : 'phantomjs' 
         } 
         break; 
        case 'chrome': 
         var capabilities = { 
          'browserName' : 'chrome' 
         } 
         break; 
        } 
    
    return browserHandle = new webdriver 
        .Builder() 
        .withCapabilities(capabilities) 
        .build(); 
    
  4. 呼叫. start.sh firefox (phantomjs, chrome)
+0

所有建議來自'@acontell'和'@ Svabael'的解決方案對我的黃瓜-js不起作用,它一直打印出來 錯誤:ENOENT:沒有這樣的文件或目錄,realpath'--profile.desktop.env。瀏覽器'在Object.realpathSync(fs.js:1574:18)的Error(native) – 6axter82