32

Yeoman とgenerator-angularを使用して AngularJS アプリを管理していますが、自動テストに問題があります。

Runninggrunt testは単体テストを 1 回実行します。Gruntfile.jsのカルマ構成ブロックを変更し、e2e を追加することで、単体テストの後に E2E テストを実行することができます。

karma: {
  //...
  e2e: {
    configFile: 'karma-e2e.conf.js',
    singleRun: true
  }
},

すばらしい: 入力するとgrunt test、すべてのテストが実行されるようになりました。ただし、それらは 1 回しか実行されず、大きなオーバーヘッドがあります (コンパスの開始、サーバーの実行、Chrome プロセスの起動など)。代わりに、サーバーと Chrome プロセスを実行したままにし、テストを保存するときにテストを再実行する必要があります。

karma.conf.jsこれを実現するには、 とkarma-e2e.conf.jsおよび 設定の両方を変更し、1 つのターミナル ペインでsingleRun = true実行し、別のターミナル ペインで実行します。カルマ構成の競合 (デフォルトで競合する) 内のポートがまったくない場合、これは機能します。今、私は Grunt をバイパスして、自分のことをしているだけです (Grunt は物事を簡単にするはずなので、少しばかげているようです)。karma startkarma start karma-e2e.conf.js

とにかく、さらにいくつかの変更 (修正?) を行った後 (簡潔にするために詳しく説明しません)、これは機能しますが、うまくいきません。2 つの異なるコマンドを実行し、2 つの異なるターミナル ペインを監視する必要があります。きっともっと良い方法があります。

単一のコマンドを実行してテスト ファイルを監視し、テストを適切に再実行するにはどうすればよいですか?

おまけの質問: この機能がそのまま提供されないのはなぜですか? generator-angular の開発者がこのようなものを実装するのに十分な時間がないという問題ですか? 私は Angular/Yeoman/Karma を始めたばかりなので (お気づきかもしれませんが)、E2E と単体テストの両方の自動テストがワークフローにとって重要であると感じているためです。

4

4 に答える 4

0

karma.conf.js ファイル (約 38 行目) 内で、autoWatch = false; を見つけます。true に変更します。

ここで grunt karma:unit を実行すると、テスト サーバーが実行されたままになり、プロジェクト ファイルに変更を加えるとすぐにテストが再実行されることがわかります。

于 2013-10-22T09:52:07.200 に答える
0

これを試して、e2e テストのみを実行できます

grunt karma:e2e
于 2013-07-28T16:58:00.673 に答える
-2
//
// test/midway/appSpec.js
//
describe("Midway: Testing Modules", function() {
  describe("App Module:", function() {

    var module;
    before(function() {
      module = angular.module("App");
    });

    it("should be registered", function() {
      expect(module).not.to.equal(null);
    });

    describe("Dependencies:", function() {

      var deps;
      var hasModule = function(m) {
        return deps.indexOf(m) >= 0;
      };
      before(function() {
        deps = module.value('appName').requires;
      });

      //you can also test the module's dependencies
      it("should have App.Controllers as a dependency", function() {
        expect(hasModule('App.Controllers')).to.equal(true);
      });

      it("should have App.Directives as a dependency", function() {
        expect(hasModule('App.Directives')).to.equal(true);
      });

      it("should have App.Filters as a dependency", function() {
        expect(hasModule('App.Filters')).to.equal(true);
      });

      it("should have App.Routes as a dependency", function() {
        expect(hasModule('App.Routes')).to.equal(true);
      });

      it("should have App.Services as a dependency", function() {
        expect(hasModule('App.Services')).to.equal(true);
      });
    });
  });
});
于 2013-06-07T05:24:01.320 に答える