2

コントローラー、ルート、テンプレートなどをテストするようにAngularJSアプリケーションをセットアップしようとしていますが、angular-mocks.jsによって提供されるヘルパーメソッドの一部(つまり、moduleinject)を機能させるのに問題があります。 。

testacularを使用して、仕様の前に追加された次のファイルを含むテストスイートをロードしています。

files = [
  MOCHA,
  MOCHA_ADAPTER,
  '../application/lib/angular.min.js',
  './lib/angular/angular-mocks.js',
  './lib/angular/angular-scenario.js',
  '../application/application.js',
  './lib/chai.js',
  './lib/chai-should.js',
  './lib/chai-expect.js',
  './spec/**/*.js'
];

これまでのところ良好ですが、テストを実行すると、次の問題が発生します。

ReferenceError: Can't find variable: module

これがどこにロードされているかわからない。私は何かが足りないのですか?

4

2 に答える 2

4

最初に確認することは、これらのファイルがすべてテストブラウザに読み込まれていることです。設定でパスを間違えて気付かないのは驚くほど簡単です。でtestacularを実行している場合は、ブラウザでautowatchに移動しhttp://localhost:9876/context.html、開発者ツールを使用して要素/リソース/ネットワークを検査し、不足しているものがないかどうかを確認できます。

すべてが正常で、まだ問題が解決しない場合は、テストコードをいくつか投稿してください。確認します。

更新:Jasmineでのみ利用可能なangular-mocks.jsのソース(1635行目)のコメントから(奇妙なことに)表示されます。window.moduleジャスミンの代わりにモカを使用しているようです。これが原因である可能性が非常に高いです。

答え:

あなたが自分で理解したので、私はこのMatskoを正しく信用することはできません...しかし、現在のAngularJSの安定したダウンロードとangular-seedには、Mochaをサポートしない古いバージョンのngMockが含まれていることがわかりました。モックファイルをgithubリポジトリの最新のものに手動で置き換えると、問題が解決します。お役に立てて嬉しいです ;-)

于 2012-11-20T17:45:09.197 に答える
1

私は今日この問題に遭遇し、これを機能させるために必要な手順の完全な要約を他の人に提供したいと思いました。まず、myAppという名前のモジュールがあるとします。そのモジュールの中にはmyModelというサービスがあります。myModelサービスには、getItems()という名前のメソッドがあります。

  1. 現在、angular-mocks.js(AngularJS 1.0.6を使用しています)はMochaをサポートしていません。このリンクにアクセスして、1.0.6バージョンをAngularJSGitHubプロジェクトのマスターブランチのものに置き換える必要があります。これを行う簡単な方法(wgetがある場合)はwget https://raw.github.com/angular/angular.js/master/src/ngMock/angular-mocks.js、正しいディレクトリにあります。適切に構成されたSublimeまたはvimを使用すると、簡単にプルダウンすることもできます。
  2. karma.conf.jsファイルのfiles配列にangular-mocks.jsファイルが含まれていることを確認してください
  3. tests.jsファイルのどこかに(おそらくトップレベルのdescribeで)、beforeEach(module('myApp'));メインモジュールに名前を付けたものを含めます。
  4. 複数の場所でサービス(またはテストに含めたいもの)を使用する場合は、次のように必要な場所ごとに別の場所に電話をかけることができます。

beforeEach(inject(function(myModel) {
mymodel = myModel;
}));

それ以外の場合は、必要な場所に注入できます。これで、mymodel変数(これは上記のbeforeEachで割り当てた変数であることに注意してください)を次のブロックでテストできるようになります。たとえば、次のように書くことができます。

describe('when fetched', function() {
it('should return 3 items', function() {
// console.log(mymodel.getItems());
expect(mymodel.getItems()).to.have.length(3);
});
});

于 2013-04-13T20:48:35.483 に答える