12

ノックアウト ビューモデルのヘッドレス テストを実行しようとしています。私は意図的にビューモデル内の UI 構造を処理することを避け、ワイヤーアップを HTML ページに残します。

これはブラウザで実行されるため、ジャスミンではうまく機能しますが、 mochaに切り替えると、ノックアウトの最後の行に真っ先に実行されます。

})(ウィンドウ、ドキュメント、ナビゲーター);

私は素晴らしい代替手段となるzombiejsの使用を見てきましたが、ノックアウトソース自体を変更せずにそれを使用する方法についての良い話は見当たりません.

これにアプローチする方法について何か考えはありますか?

4

2 に答える 2

5

これは現在、私のレーダーでも話題になっています。調査結果が正しい方向に向けられることを期待して、ここに調査結果を掲載します。

最初に試みる可能性が高いルートはPhantomJSです。これはヘッドレス WebKit ブラウザーであるため、優れた DOM、JSON、HTML5、および CSS セレクターのサポートが必要です (たとえば、 jQuery および qUnitで動作します)。

これを選択したのは、.travis.yml ファイルと次のコメントがあったノックアウト.js リポジトリで発見した、ノックアウト.js 自体で使用されているためです。

ここに画像の説明を入力

これが機能するという証拠はありませんが、knockout.js コアでの使用に励まされました。また、優れた起動ポイントのように見えるノックアウト/ファントム用のランナー スクリプトも見つけました。

また、node.js を介して Mocha と PhantomJS を使用する例もいくつか見つけまし 。これには、Grunt を拡張して Phantom 内で mocha を実行するこの libや、PhantomJS内で mocha を実行する方法を示すこのスクリプトが含まれます。少なくともその部分は確かです。

ノックアウトjsアーカイブに記載されている別の解決策は、ノックアウトノードJsDOMを使用して実行可能なDOMを作成することですが、一見すると、これは漠然としていて、独自のテスト環境を実装することになりそうです.

ゾンビ.jsがノックアウト/ノード/などで動作することを示唆するスライドデッキがあります。しかし、確固たる証拠を提供するものは何も見つからないので、このルートも好きではありませんでした.

于 2012-07-04T18:26:34.767 に答える
2

おそらくこれはノックアウトが変更されたためです(受け入れられた回答が古いため)が、今日、これは(もう)必要ではないと思います。Knockout ビューモデルは簡単にテストできます。テストでグローバルko変数を設定するだけで済みました。

global.ko = require('../../Website/Scripts/knockout-3.4.0.js');

その後、通常どおりテストを実行できます。ビューモデルをインスタンス化し、それに対して操作を実行してアサートします。

私はそれについてもう少し書いていますが、本質的に、これは私にとってはうまくいきます:

global.ko = require('../../Website/Scripts/knockout-3.4.0.js');

var MyViewModel = require('../../Website/Scripts/myViewModel.js').MyViewModel;

describe('MyViewModel', function() {
    var viewModel;

    beforeEach(function(){
        viewModel = new MyViewModel();
    });

    describe('...', function() {
        /* And so on */
    });
});
于 2016-09-26T10:40:00.237 に答える