2017-12-08 26 views
2

Nightswatch.js와의 엔드 투 엔드 테스트를 포함하여 vue-cli를 사용하여 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 
     } 
    } 
    } 
} 

입니다 작업은 통과하지만 로그보고 만 단위 테스트는 통과 테스트이며, 종단 간 테스트는 통과하지 않습니다.

> 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 

가 어떻게 제대로 gitlab-CI 또는 Gitlab-CI에 E2E 테스트를 실행하는 nightswatch 구성 할 수 있습니다 ?

+0

당신이이 테스트를 실행하는 기계는 JAVA가 설치되어 있어야합니다. 셀레늄은 그것 없이는 달릴 수 없다. – tehbeardedone

+0

셀레늄/독립형 크롬 고정 이미지 위로 자바를 추가하면 문제가 해결 될 것이라고 생각하십니까? 아니면 여기서 더 정교한 작업을해야합니까? – Overdrivr

+0

어쨌든이 문제를 해결하기 위해 Docker를 사용하고 싶었습니다. 그 이미지에는 이미 Java가 설치되어 있어야합니다. 지금 나는 잘못되어 가고있는 것이 정말로 혼란 스럽다. 내가 사용하고있는 Gitlab 러너에 Java 기능이 있는지 확인합니다. 사용중인 고정 표시기 이미지에는 이미 Java가 설치되어 있으므로 그렇게 할 수 없습니다. – tehbeardedone

답변

1

이제 구성 및 작성 파일을 살펴본 결과 더 이상 문제가 발생한다고 생각합니다. 먼저해야 할 일은 selenium/standalone-chrome 서비스에 .yml 파일의 이름을 지정하는 것입니다. 문제는 자바가 설치되어 있지 않은 테스트 컨테이너 (노드 ​​이미지)에서 셀렌 독립 실행 형을 실행하려고하는 것입니다. 그러나, selenium/standalone-chrome 이미지가 않습니다 그리고 당신은 당신이해야 할 두 번째 것은에서 test_settings 아래 nightwatch의 설정 및 포인트 selenium_host에서 완전히 셀레늄 섹션을 제거입니다 localhost

services: 
    "chrome" 
    - selenium/standalone-chrome 

#...rest of file can stay the same 

대신 테스트를 가리 키도록 할 곳이다 당신의 크롬 서비스. 여기

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 초의 시간 초과로도 오류가 발생하므로 문제가없는 것으로 추측됩니다. dev 서버가 시작되지 않습니다. – Overdrivr