2016-12-02 150 views
2

我通过npm运行量角器v4.0.9,并且发现即使在测试报告为失败时,我的Visual Studio Team Services上的构建也不会失败。进一步研究,我引入了一个错误,以便测试失败,然后在本地运行它们。正如下面的屏幕截图所示,我有17/17次失败的测试,但退出代码仍然为0,我知道这是成功的。它甚至说chrome #01 passed,我认为这是错误的。量角器即使测试失败也会退出代码0

protractor passing when it should fail

这里是我的量角器配置:

"use strict"; 
exports.config = { 
    baseUrl: process.env.npm_package_config_baseUrl, 
    framework: 'jasmine', 
    capabilities: { 
     browserName: 'chrome' 
    }, 
    specs: ['test/*.spec.js'], 
    rootElement: 'se-app', 
    directConnect: true, 
    ignoreUncaughtExceptions: false, 
    onPrepare: function() { 
     var globals = require('protractor'); 
     var browser = globals.browser; 
     browser.ignoreSynchronization = true; 
     browser.manage().window().maximize(); 
     var specReporter = require('jasmine-spec-reporter'); 

     // add jasmine spec reporter 
     jasmine.getEnv().clearReporters(); 
     jasmine.getEnv().addReporter(new specReporter({ 
      displayStacktrace: false 
     })); 

     var reporters = require('jasmine-reporters'); 
     jasmine.getEnv().addReporter(new reporters.JUnitXmlReporter({ 
      savePath: 'junit/' 
     })); 
    }, 
}; 

我查了documentation for the Protractor config,但无法看到任何明显的设置,会导致这种情况发生。我甚至在ignoreUncaughtExceptions:false(如上所示)中添加了明确的内容,但没有任何区别。

+0

你使用的是什么版本的节点?我遇到了一个奇怪的问题,那就是我正在使用更新版本的节点,并且它是所有测试都立即通过的地方。我不得不恢复到较旧版本的节点。我发现它与4.2.4一起工作,但我不得不删除我的节点模块文件夹并再次执行npm安装。 – BarretV

+1

我正在使用v7.2.0。然而,我第一次发现问题的构建服务器使用的是v5(不确定究竟是哪个版本,因为我现在也更新到v7.2.0)。 – Maloric

+0

我意识到我只是说了一个更新的版本。我使用的新版本是4.5给我的问题。我使用的一件事是nvm轻松地在不同版本的节点之间切换。我的问题与您的问题并不完全相同,但它发生在我的团队中的几个人使用4.5版本处理我们正在处理的其他项目 – BarretV

回答

1

好吧,我发现了这个问题。默认情况下,Jasmine包含控制台ReporterCompletionReporter。如果测试失败,后者将退出流程。通过清理记者,我正在清除记者。

我可以删除该行,但我想删除控制台记者,以便规范记者和控制台记者都不是都在做同样的工作。

所以我不得不加入完成记者。我不知道这是否是“正确”的方式来做到这一点,但它的工作原理。这里是我的新的onPrepare功能:

onPrepare: function() { 
    let globals = require('protractor'); 
    let reporters = require('jasmine-reporters'); 
    let CompletionReporter = require('jasmine/lib/reporters/completion_reporter'); 
    let SpecReporter = require('jasmine-spec-reporter'); 

    let browser: ProtractorBrowser = globals.browser; 
    browser.ignoreSynchronization = true; 
    browser.manage().window().maximize(); 

    let specReporter = new SpecReporter({ 
     displayStacktrace: false 
    }); 

    let junitReporter = new reporters.JUnitXmlReporter({ 
     savePath: 'junit/' 
    }); 

    let completionReporter = new CompletionReporter(); 
    completionReporter.onComplete((success: boolean) => { 
     if (!success) { 
      process.exit(1); 
     } 
    }); 

    // Now clear all existing reporters and add the ones I want in the order I want 
    jasmine.getEnv().clearReporters(); 
    jasmine.getEnv().addReporter(specReporter); 
    jasmine.getEnv().addReporter(junitReporter); 
    jasmine.getEnv().addReporter(completionReporter); 
} 
+0

我试过了,它不会让量角器/茉莉花优雅地退出,所以我最终得到了一个持久的Chrome浏览器。所以看起来好像应该有更优美的方式来实现这一点。 – donmartin

+0

不适合我。进程仍然以退出状态4退出 –

0

如果您使用grunt-protractor-runner模块来运行量角器,请确保在Gruntfile.js中protractor下的选项keepAliveoptions设置为false。

相关问题