1

Angular プロジェクトでディレクティブの単体テストを行う必要があります。このディレクティブは、$http を使用してデータを取得し、ローカル キャッシュに保存するサービスを参照します。そして私のテストケースは次のようになります:

    describe('nationality testing',function(){

    it('should get countries',function(){
        var mockCountries=[{"CountryID":1,"Name":"Afghanistan","Nationality":"Afghan"},{"CountryID":2,"Name":"South Africa","Nationality":"South African"},{"CountryID":3,"Name":"Albania","Nationality":"Albanian"},{"CountryID":4,"Name":"Algeria","Nationality":"Algerian"}];
        var expectUrl=casinolink.config.MockServicePrefix+casinolink.config.MockServices.Country;    
        httpBackend.expectGET(expectUrl).respond(201,mockCountries);
        var t=compile("<cl-nationality  clNationality-selected=\"yourNationalityModel\" ><option></option></cl-nationality>")(scope);
        scope.$digest();
        httpBackend.flush(1);
        expect(scope.$$childHead.options.length).toBe(4);
    });
});

最初にカルマ ユニット テストを開始したときはすべて成功しましたが、テスト ページを再度更新すると、このテスト ケースは失敗し、エラーが表示されました。

Error: No pending request to flush !
at Error (<anonymous>)
at Function.$httpBackend.flush (http://localhost:9876/absoluteC:/WebUI/WebUI/test/lib/angular/angular-mocks.js:1195:34)
at null.<anonymous> (http://localhost:9876/absoluteC:/WebUI/WebUI/test/unit/directives.spec.js:163:25)
at jasmine.Block.execute (http://localhost:9876/absoluteC:/Users/zhangji/AppData/Roaming/npm/node_modules/karma-jasmine/lib/jasmine.js:1145:17)
at jasmine.Queue.next_ (http://localhost:9876/absoluteC:/Users/zhangji/AppData/Roaming/npm/node_modules/karma-jasmine/lib/jasmine.js:2177:31)
at jasmine.Queue.start (http://localhost:9876/absoluteC:/Users/zhangji/AppData/Roaming/npm/node_modules/karma-jasmine/lib/jasmine.js:2130:8)
at jasmine.Spec.execute (http://localhost:9876/absoluteC:/Users/zhangji/AppData/Roaming/npm/node_modules/karma-jasmine/lib/jasmine.js:2458:14)
at jasmine.Queue.next_ (http://localhost:9876/absoluteC:/Users/zhangji/AppData/Roaming/npm/node_modules/karma-jasmine/lib/jasmine.js:2177:31)
at jasmine.Queue.start (http://localhost:9876/absoluteC:/Users/zhangji/AppData/Roaming/npm/node_modules/karma-jasmine/lib/jasmine.js:2130:8)
at jasmine.Suite.execute (http://localhost:9876/absoluteC:/Users/zhangji/AppData/Roaming/npm/node_modules/karma-jasmine/lib/jasmine.js:2604:14) 

私が使用したサービスは、最初のアクセス後にデータをローカルキャッシュに保存し、新しいリクエストを作成せずにキャッシュからすべてを取得するため、$httpBackend.flush()上記のエラーが表示されるため、これを考えました。(私はangularJsの初心者です。これはこのエラーに関する私の分析です)

私の質問は、 $httpBackend.flush() の前にローカルキャッシュを消去する方法ですか? 私の問題を解決するために別のアイデアを持っている人はいますか?

更新: Chrome コンソールを開くと、angular サービスがブラウザーのローカル ストレージにデータを保存していることがわかりました。このストレージを削除すると、単体テストに合格しましたが、更新すると再び表示されます。 ここに画像の説明を入力 最初のアクセスでデータの保存を許可する必要があるため、サイトがデータを設定するのをブロックできません。カルマまたは角度はどのようにこれをクリアできますか?

4

1 に答える 1

3

私はついに解決策を見つけました、それはとても簡単です!

各仕様の前にストレージをクリアします。

    beforeEach(function(){
    localStorage.clear();
});
于 2013-10-22T06:48:08.223 に答える