2017-12-08 4 views
2

vue-cliを使って、Nightswatch.jsのエンドツーエンドテストを含むVueJSプロジェクトを生成しました。私は、次の.gitlab-ci.ymlファイルgitlab-ciのVueJSアプリのe2eテスト

services: 
    - selenium/standalone-chrome 

stages: 
    - test 
    - pages 

test: 
    image: node:6.11 
    stage: test 
    before_script: 
    - node -v 
    - npm -v 
    script: 
    - npm install 
    - npm test 

pages: 
    image: node:6.11 
    stage: pages 
    before_script: 
    - node -v 
    - npm -v 
    script: 
    - npm install 
    - npm run build 
    - cp -R ./dist ./public 
    - cd ./public 
    - ls 
    artifacts: 
    paths: 
     - public 
    only: 
    - master 

これを使用してい

がGitlab-CIではnightswatch.conf.jsファイル

require('babel-register') 
var config = require('../../config') 

// http://nightwatchjs.org/gettingstarted#settings-file 
module.exports = { 
    src_folders: ['test/e2e/specs'], 
    output_folder: 'test/e2e/reports', 
    custom_assertions_path: ['test/e2e/custom-assertions'], 

    selenium: { 
    start_process: true, 
    server_path: require('selenium-server').path, 
    host: '127.0.0.1', 
    port: 4444, 
    cli_args: { 
     'webdriver.chrome.driver': require('chromedriver').path 
    } 
    }, 

    test_settings: { 
    default: { 
     selenium_port: 4444, 
     selenium_host: 'localhost', 
     silent: true, 
     globals: { 
     devServerURL: 'http://localhost:' + (process.env.PORT || config.dev.port) 
     } 
    }, 

    chrome: { 
     desiredCapabilities: { 
     browserName: 'chrome', 
     javascriptEnabled: true, 
     acceptSslCerts: true 
     } 
    }, 

    firefox: { 
     desiredCapabilities: { 
     browserName: 'firefox', 
     javascriptEnabled: true, 
     acceptSslCerts: true 
     } 
    } 
    } 
} 

で、ジョブが渡されますが、ログを見ているだけ単体テストは最終テストではなく、合格となります。私はきちんとGitlab-CIにE2Eテストを実行するためにgitlab-CIやnightswatchを設定するにはどうすればよい

> node test/e2e/runner.js 

Starting selenium server... 
An error occurred while trying to start Selenium. Check if JAVA is installed on your machine. 
{ Error: spawn java ENOENT 
    at exports._errnoException (util.js:1020:11) 
    at Process.ChildProcess._handle.onexit (internal/child_process.js:197:32) 
    at onErrorNT (internal/child_process.js:376:16) 
    at _combinedTickCallback (internal/process/next_tick.js:80:11) 
    at process._tickCallback (internal/process/next_tick.js:104:9) 
    at Module.runMain (module.js:606:11) 
    at run (bootstrap_node.js:383:7) 
    at startup (bootstrap_node.js:149:9) 
    at bootstrap_node.js:496:3 
    code: 'ENOENT', 
    errno: 'ENOENT', 
    syscall: 'spawn java', 
    path: 'java', 
    spawnargs: 
    [ '-Dwebdriver.chrome.driver=/builds/Overdrivr/frontend/node_modules/chromedriver/lib/chromedriver/chromedriver', 
    '-jar', 
    '/builds/Overdrivr/frontend/node_modules/selenium-server/lib/runner/selenium-server-standalone-3.8.1.jar', 
    '-port', 
    4444 ] } 
INFO Selenium process finished. 
Job succeeded 

+0

あなたはこれらのテストを実行しているマシンは、JAVAがインストールされている必要があります。セレンはそれなしでは走れません。 – tehbeardedone

+0

セレン/スタンドアロンクロムドッカー画像の上にJavaを追加するだけで問題を解決できるはずですか?または、ここでもっと精巧なことをする必要がありますか? – Overdrivr

+0

何とか私はあなたがこのためにDockerを使用していたことを忘れていました。そのイメージにはすでにJavaがインストールされているはずです。今私は本当に何がうまくいかないのか混乱しています。使用しているGitlabランナーにJava機能があることを確認します。あなたが使用しているドッカーイメージはすでにJavaがインストールされているので、それはできません。 – tehbeardedone

答えて

1

あなたの設定とあなたの作成ファイルを見て、もう少し私はあなたの問題を見ると思います。まず、selenium/standalone-chromeサービスに.ymlファイルの名前を付けます。問題は、Javaがインストールされていないテストコンテナ(ノードイメージ)でSeleniumスタンドアロンを起動しようとしていることです。しかし、selenium/standalone-chrome画像はありません、これは、あなたのテストの代わりに、localhost

services: 
    "chrome" 
    - selenium/standalone-chrome 

#...rest of file can stay the same 

を指すようにしたい場所あなたがする必要がある第二のものは、あなたにtest_settings下完全にあなたのナイトウォッチの設定とポイントselenium_hostからセレンセクションを削除されていますクロムサービス。ここで

selenium_host: 'chrome', 

は私のために働いているnightwatch.jsondocker-compose.ymlです。

は、ドッキングウィンドウ-compose.yml

version: '3' 
services: 
chrome: 
    image: selenium/standalone-chrome 
tests: 
    image: nightwatch-tests 
    environment: 
    - ENV_PASS=${ENV_PASS} 
    depends_on: 
    - chrome 

nightwatch.json

{ 
    "src_folders": [ 
    "nw_tests" 
    ], 
    "output_folder": "nw_reports", 
    "page_objects_path": "./nw_tests/pages", 
    "globals_path": "globals.js", 
    "test_workers": false, 
    "test_settings": { 
    "default": { 
     "launchUrl": "https://mylaunchurl/login", 
     "selenium_port": 4444, 
     "selenium_host": "chrome", 
     "silent": true, 
     "screenshots": { 
     "enabled": true, 
     "path": "nw_screenshots" 
     }, 
     "desiredCapabilities": { 
     "browserName": "chrome", 
     "chromeOptions" : { 
      "args": ["deny-permission-prompts"], 
      "prefs": { 
      "profile.default_content_settings.popups": 0, 
      "download.prompt_for_download": false 
      } 
     } 
     } 
    } 
    } 
} 
+0

私はあなたの答えでかなりの進歩を遂げました。テストが始まります。しかし、今度は、要素「<#app>」が5000ミリ秒間存在するのを待つ間に「タイムアウトしました。 - 期待される "目に見える"が、 "見つからなかった"。私は調査するつもりですが、もしあなたが何か考えて自由にコメントすることができたら、 – Overdrivr

+0

ええ、あなたのアプリケーションに受け入れられるものに外部グローバルファイルの 'waitForConditionTimeout'のタイムアウトを増やすだけでいいです。 https://github.com/nightwatchjs/nightwatch/blob/375f578509e0d3ba819b7f1ef466159874d58086/examples/globalsModule。js#L12 – tehbeardedone

+0

これは15秒のタイムアウトでも失敗します。だから、デベロッパーサーバーが起動していないという問題があると思います – Overdrivr

関連する問題