如何在AngularJs单元测试中的$ httpBackend.flush()之前清理缓存?

时间:2013-10-22 06:24:54

标签: unit-testing angularjs caching karma-runner

我需要在Angular项目中对指令进行单元测试。该指令引用一个使用$ http required get data的服务,然后将它们存储在本地缓存中。我的测试用例如下:

    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);
    });
});

当我第一次开始我的业力单元测试时,所有ut都通过,但随后我再次刷新我的测试页面,此测试用例失败并弹出错误:

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控制台,发现角度服务将数据存储在浏览器本地存储中,一旦我删除了这个存储,我的单元测试通过,但刷新,它又来了。 enter image description here 我无法阻止网站设置任何数据,因为我需要在首次访问时允许存储数据。 业力或角度怎么可能清楚这个?

1 个答案:

答案 0 :(得分:2)

我终于找到了解决方案,这很简单!

在每个规范之前清除存储空间:

    beforeEach(function(){
    localStorage.clear();
});