2016-10-27 24 views
2

チームシェアビルドのステップでe2eテストと同様に必要なサーバーを実行するにはどうすればよいですか?チームシティでe2eテストを実行する方法、バックグラウンドでサーバーを実行してe2eを実行する方法

私は角度2のアプリケーションの分度器e2eテストを持っています。 (私は角度のついたものと甘いものが面白いですが、私には負担してください)

ローカルでテストを実行する方法は次のとおりです。 3つのコンソールウィンドウ(w1、w2、w3)が必要です。私がする必要がある

W1)まず最初は、私のアプリケーション起動です:

npm start - >私はng serve -prod

W2としてpackage.jsonで定義されている)すると、偽のバックエンドを開始急行ウェブサーバ

npm run gulp e2e-server - >gulpはチームシティーで認識されませんので、私は、私のパッケージの設定で"gulp": "gulp"を定義しました。

3ワット)そして最後に、私は私のパッケージの設定次に

"pree2e": "webdriver-manager update""e2e": "protractor"を定義した私のE2Eテスト

npm run e2e -- e2e/protractor-teamcity.conf.jsを実行することができます...

私は手動で停止する必要があります私が始めた2台のサーバー。このハックのような

何かが動作します:

npm run gulp e2e-clean && start "MyWindow" cmd /c "start npm start && npm run gulp e2e-server" && ping -n 31 127.0.0.1 >nul && npm run e2e -- e2e/protractor-teamcity.conf.js

しかしstartが停止することはありませんコンソールウィンドウを作成します。私はこれの結果が何であるか分かりません(これが2回成功するかどうかは疑問です)。 pingはスリープハックですが、理想的でもありません。

テスト実行中に「バックグラウンドで」コマンドを実行した後にそれを強制終了するソリューションを見つけた人は誰ですか?

答えて

1

これはひどいハックです。何かが深く間違っている示唆してハックの一種が、退屈:

NGはサーブが、それは一口がそれを実行したときは「角度-CLI」、これにそれを変更するには、コンソールウィンドウのタイトルを変更します実行します「ゴクゴク"(または"胃の選択 ")。私はこれらのタイトルで何か他のものが出てくるとは思わない。 これは、移動してこれらのウィンドウを強制終了するには、__kill-running-windowsと書いてください。

パッケージ。JSON:

"scripts": { 
    "start": "ng serve -prod", 
    "test": "gulp test-teamcity", 
    "pree2e": "webdriver-manager update", 
    "e2e": "protractor", 
    "gulp": "gulp", 

    "e2e-teamcity": "gulp _e2e-clean && npm run _e2e-teamcity & npm run _kill-running-windows", 
    "_e2e-teamcity": "npm run _e2e-servers && gulp __wait-60 && gulp _e2e-test-teamcity", 
    "_e2e-servers": "start gulp _e2e-server && start gulp serve", 
    "_kill-running-windows": "taskkill /fi \"Windowtitle eq gulp\" & taskkill /fi \"Windowtitle eq select gulp\" & taskkill /fi \"Windowtitle eq angular-cli\" & taskkill /fi \"Windowtitle eq select angular-cli\"" 
    }, 

コード(興味深い部分とにかく、私は、例えば一気は読者の想像に役立つものを残しておきます):

var expressServer = require("gulp-express"); 
var process = require("child_process"); 
var shell = require("gulp-shell"); 

/** 
* Run vanilla e2e tests with teamcity reporter 
* 
* (Remember to call `e2e-server`, `serve` and edit `config.json` to point at config.e2e.json` first) 
*/ 
gulp.task("_e2e-test-teamcity", function(done) { 
    return gulp.src("") 
    .pipe(
     shell(["npm run e2e -- e2e/protractor-teamcity.conf.js"]) 
    ) 
}); 

gulp.task("__wait-60", function(done) { 
    // HACK: Do 61 pings -> wait 30 seconds 
    process.exec("ping 127.0.0.1 -n 61 > nul", function (err, stdout, stderr) { 
     done(); 
    }); 
}); 


/** 
* Run mock backend for the e2e, with canned answers to all calls 
* !! Use config.e2e.json in your application in order to point at this !! 
*/ 
gulp.task("_e2e-server", function() { 
    expressServer.run(["./e2e/server.js"]); 
    gulp.watch(["./e2e/server.js"], expressServer.notify); 
}); 

を何らかの理由で、一息に多くのコードを移動させるように見えましたビルドはチームシップで決して終わらない。しかし、ここではより多くの一口ベースである私は、ローカルに使用E2Eは、です:これはすべての時間を働いていない

/** 
* Run vanilla e2e tests 
* Cleans screenshots folder, tarts the application, starts the mock server 
* Leaves command windows running the servers open at the end of the test run 
* 
* 30 second wait for tests to start 
* 
* (Remember to edit `config.json` to point at config.e2e.json` first) 
*/ 
gulp.task("e2e", ["_e2e-clean"], function (done) { 
    gulp.src("") 
    .pipe(
     shell(["start gulp _e2e-server"]) 
    ).pipe(
     shell(["start gulp serve"]) 
    ); 
    runSequence("__wait-30","_e2e-test", done); 
}); 
+0

、私は本当に私はこれを行うための別の方法を考えることがしたいです。 –

関連する問題