用Protractor ci进行Angular 2端到端测试

时间:2016-05-23 13:06:52

标签: angular protractor travis-ci

我使用angular2-seed制作了一个项目。我想为它写一些e2e测试。成功地让它们在本地运行,但是在Travis-C中进行e2e测试时,存在一个无法找到测试所用元素的问题。

例如,我有一个侧边栏菜单组件:

import {Component} from '@angular/core';
import { ROUTER_DIRECTIVES } from '@angular/router';

@Component({
    selector: 'sidebar-menu',
    directives: [ ROUTER_DIRECTIVES ],
    templateUrl: 'app/shared/sidebar-menu/sidebar-menu.html'
})

export class SidebarMenuComponent {}

使用侧边栏菜单html:

<div id="sidebar-menu" class="main_menu_side hidden-print main_menu">
  <div class="menu_section">
    <h3>Algemeen</h3>
    <ul class="nav side-menu">
        <li><a [routerLink]="['/']"><i class="fa fa-home"></i> Home <span class="fa fa-chevron-down"></span></a></li>
    </ul>
  </div>
</div>

我写的e2e测试:

describe('Sidebar', () => {
  beforeEach( () => {
      browser.get('/');
  });

  it('Side menu should have the right title', () => {
      expect(element(by.css('#sidebar-menu h3')).getText()).toEqual('ALGEMEEN');
  });
});

当我使用npm run e2e.ci在本地运行时,它可以正常运行。然而,在travis-ci上,测试没有通过,它只是说&#34;期望&#39;&#39;平等的#ALGEMEEN&#39;&#34;。不知道我做错了什么。

我使用Angular 2 RC1,travis使用NodeJS 5/6。

Travis-ci输出:

1) Sidebar Side menu should have the right title
  Message:
    Expected '' to equal 'ALGEMEEN'.
  Stack:
    Error: Failed expectation
        at Object.<anonymous> (app/shared/sidebar-menu/sidebar-menu.component.e2e-spec.ts:11:60)
        at /home/travis/build/node_modules/jasminewd2/index.js:96:23
        at new Promise (/home/travis/build/node_modules/selenium-webdriver/lib/promise.js:1043:7)
        at controlFlowExecute (/home/travis/build/node_modules/jasminewd2/index.js:82:18)
        at TaskQueue.execute_ (/home/travis/build/node_modules/selenium-webdriver/lib/promise.js:2790:14)
        at TaskQueue.executeNext_ (/home/travis/build/node_modules/selenium-webdriver/lib/promise.js:2773:21)
        at /home/travis/build/node_modules/selenium-webdriver/lib/promise.js:2697:25
        at /home/travis/build/node_modules/selenium-webdriver/lib/promise.js:639:7
        at process._tickCallback (internal/process/next_tick.js:103:7)

Travis.yml:

language: node_js
node_js:
  - 5
  - 6

sudo: false

before_install:
  - export CHROME_BIN=chromium-browser  # Karma CI
  - export DISPLAY=:99.0

before_script:
  - sh -e /etc/init.d/xvfb start
  - nohup bash -c webdriver-manager start 2>&1 &  # Protractor CI
  - sleep 1  # give server time to start

after_failure:
  - cat /home/travis/build/mgechev/angular2-seed/npm-debug.log

cache:
  directories: node_modules

script:
  - npm run tests.all

Protractor.conf.js:

const config = {
  baseUrl: 'http://localhost:5555/',
  restartBrowserBetweenTests: false,

  specs: [
    './dist/dev/**/*.e2e-spec.js'
  ],

  exclude: [],

  // 'jasmine' by default will use the latest jasmine framework
  framework: 'jasmine2',

  // allScriptsTimeout: 110000,

  jasmineNodeOpts: {
    // showTiming: true,
    showColors: true,
    isVerbose: false,
    includeStackTrace: false,
    // defaultTimeoutInterval: 400000
  },

  directConnect: true,

  capabilities: {
    browserName: 'chrome'
  },

  onPrepare: function() {
    const SpecReporter = require('jasmine-spec-reporter');
    // add jasmine spec reporter
    jasmine.getEnv().addReporter(new SpecReporter({ displayStacktrace: true }));

    browser.ignoreSynchronization = false;
  },


  /**
   * Angular 2 configuration
   *
   * useAllAngular2AppRoots: tells Protractor to wait for any angular2 apps on the page instead of just the one matching
   * `rootEl`
   */
  useAllAngular2AppRoots: true
};

if (process.env.TRAVIS) {
  config.capabilities = {
    browserName: 'firefox'
  };
}

exports.config = config;

0 个答案:

没有答案