角度4(弹出)和E2E测试(量角器/硒配置)

时间:2017-07-25 09:09:22

标签: javascript angular testing protractor

我试图通过Protractor / Selenium对一个弹出的Angular 4项目进行E2E测试。

我的package.json

...
"scripts": {
    "pree2e": "webdriver-manager update --standalone false --gecko false --quiet node",
    "e2e": "protractor ./protractor.conf.js"
}
...

我的protractor.conf

exports.config = {
    seleniumAddress: 'http://localhost:4444/wd/hub',
    directConnect: true,
    allScriptsTimeout: 60000,
    getPageTimeout: 60000,
    specs: [
        './src/e2e/**/*.e2e-test.ts'
    ],
    capabilities: {
        'browserName': 'chrome'
    },
    jasmineNodeOpts: {
        showColors: true,
        defaultTimeoutInterval: 60000
    },
    onPrepare() {
        require('ts-node').register({
            project: 'tsconfig.e2e.json'
        });

        jasmine.getEnv().addReporter(new SpecReporter({
            spec: {
                displayStacktrace: true
            }
        }));

        browser.driver.manage().timeouts().setScriptTimeout(60000);
    }
};

运行npm run e2e Chrome启动时,它会尝试为每次测试打开data:text/html,<html></html>,然后快速关闭。我错过了什么?我尝试将baseUrl添加到我的protractor.conf,但它没有帮助,因为看起来Selenium甚至没有运行。

1 个答案:

答案 0 :(得分:0)

我终于找到了解决问题的方法。我不知何故需要运行ng serve,现在可以,因为项目已被弹出,可以通过npm run start运行。这是Travis CI部署(我强烈推荐),请参阅before_script

before_script:
    - nohup npm run start &
script:
    - npm run build -aot --target=production --environment=prod
    - npm run test
    - npm run e2e

最终package.json(在ng eject之后保持默认值):

...
"scripts": {
    "ng": "ng",
    "lint": "ng lint",
    "build": "webpack",
    "start": "webpack-dev-server --port=4200",
    "test": "karma start ./karma.conf.js",
    "pree2e": "webdriver-manager update --standalone false --gecko false --quiet",
    "e2e": "protractor ./protractor.conf.js",
    "postinstall": "npm run build -aot --target=production --environment=prod"
}
...

最终protractor.conf(在ng eject之后保持默认值):

exports.config = {
    allScriptsTimeout: 11000,
    specs: [
        './src/e2e/**/*.e2e-test.ts'
    ],
    capabilities: {
        'browserName': 'chrome'
    },
    directConnect: true,
    baseUrl: 'http://localhost:4200/',
    framework: 'jasmine',
    jasmineNodeOpts: {
        showColors: true,
        defaultTimeoutInterval: 30000,
        print: function() {}
    },
    beforeLaunch: function() {
        require('ts-node').register({
            project: 'tsconfig.e2e.json'
        });
    },
    onPrepare() {
        jasmine.getEnv().addReporter(new SpecReporter({
            spec: {
                displayStacktrace: true
            }
        }));
    }
};

以下是ng ejecthttps://github.com/angular/angular-cli/issues/6171时发生的事情。

两天半的时间。感谢Angular CLI团队提供此错误,真的,谢谢。