2016-12-02 135 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。

相關問題