1

私の質問は、Mocha を使用した JavaScript コードの単体テストに関するものです。最終的に、これは依存性注入または制御の反転に関する質問になる可能性があります。私はこれらの概念をよく理解していません。

header.js のインスタンスを作成し、それがオブジェクトであることをテストするだけのテストを作成しようとしています。ただし、Modernizr をロードすると、テストが失敗し、次のエラー メッセージが表示されます。Modernizr がブラウザー内での実行に依存しているために発生しているようですが、私の単体テストはコマンド ラインで実行する必要があります。

/lib/modernizr.js:8

l.style,s=r&&!!b.createRange().compareNode,t=s?l:n.parentNod の "MozAppearance" ^ TypeError: /Users/devadmin/devenv/djscript で未定義のプロパティ 'parentNode' を読み取れません/djscript-vendor/lib/modernizr.js:8:6291

次の階層にあるrequirejsモジュールがいくつかあります。

lib
└── pj
    ├── module
    │   └── header
    │       └── header.js
    ├── util
    │   └── header
    │       └── Util.js
    └── widget
        └── header
            ├── Header.js
            └── view
                ├── HeaderView.js
                └── NavView.js

header.js は Header.js をインスタンス化し、次に HeaderView と NavView を作成します。Modernizr が必要なのは HeaderView のみです。

このコードをテスト可能な状態にする方法についてのヒントはありますか? requirejs で使用するために Modernizr をどのようにパッケージ化したかを確認することは役に立ちますか?

4

1 に答える 1

2

まあ、私は特に Mocha を使用していませんが、次のようなことを行うことで、テスト/ハーネスで偽の Modernizr インスタンスを作成できるはずです...

define(<module path/name - e.g. 'libs/modernizr'>, function(){
    return {
        history: false,
        foo: true,
        bar: false
    };
});

...テスト対象のモジュールをロードする前に。そのフェイク インスタンスを定義すると、テスト対象のモジュールは、実際の modernizr ライブラリの代わりにフェイクを使用する必要があります。

基本的に、AMD の「名前付きモジュール」(リンク: http://requirejs.org/docs/api.html#modulename ) 機能をハイジャックして、本物の modernizr を偽物に置き換えています。このようにして、必要な状態を明示的にテストできます。

それが役に立てば幸い!

于 2012-08-16T00:43:47.560 に答える