如何模拟CacheFactory(而不是$ cacheFactory)?

时间:2016-02-03 15:27:10

标签: angularjs unit-testing caching

我正在使用angular-cache.js git link提供的CacheFactory,我需要模拟它才能测试我的工厂。 这是我在工厂中用于缓存的代码。

var cache = CacheFactory.createCache('documentTypeCache', {
              deleteOnExpire: 'aggressive',
              recycleFreq: 55 * 60 * 1000,
              maxAge: 60 * 60 * 1000,
              storageMode: 'sessionStorage'
            });

这就是我在测试中嘲笑它的方式。

mockCacheFactory = function(){
                    this.createCache = jasmine.createSpy('createCache');
                    this.$get = function(){};
                };
                $provide.provider('CacheFactory', mockCacheFactory);

但是,测试失败时:Undefined is not an object指向CacheFactory.createCache

我尝试使用Google搜索,但似乎没有太多与angular-cache相关的信息。 关于如何做到这一点的任何想法?

2 个答案:

答案 0 :(得分:0)

尝试..

mockCacheFactory = {
    createCache: jasmine.createSpy('createCache'),
    $get: angular.noop
};

$provide.provider('CacheFactory', mockCacheFactory);

如果您想知道,angular.noop可以用作快速返回无功能的功能。

答案 1 :(得分:0)

经过一些头脑攻击之后,我找到了一种让它发挥作用的方法。我在错误的地方嘲笑createCache。它必须由$ get返回。以下是代码段。

$provide.provider('CacheFactory', function() {
                    this.$get = function () {
                        return {
                            createCache: jasmine.createSpy('createCache')
                        };
                    }
                });

像魅力一样工作:)