1

我正在与 AngularJS 一起构建一个 cordova / phonegap 应用程序。在我的应用程序中,我使用了一些来自 cordova 的本地插件,例如地理定位插件。

在我的测试期间,这个插件不可用(因为 phonegap 不存在),在我的测试中$window.plugins返回。undefined当然,$window.plugins.anotherPlugin也失败了。

因此,我必须为我的测试模拟这些部分。目前,我正在这样做

  beforeEach(function() {
    $window.plugins = {
      anotherPlugin: {
        foo: function() {}
      }
    };
  });

但是,如果将来另一个库使用$window.plugins命名空间,而我在我的测试中覆盖它呢?这会破坏其他测试。使用上述方法,我必须在测试后进行一些清理,以确保$window.plugins设置旧值。我认为,这种方式不是很干净,我想知道是否有更好的方式来处理茉莉花。

所以我的问题是:我怎样才能$window.plugins.anotherPlugin通过用茉莉花创建虚拟函数来监视,而不影响其他测试,什么时候$window.plugins不存在?

4

1 回答 1

1

您应该加载要测试的部分的模块并生成一个模拟模块,该模块提供间谍。

beforeEach(function () {
    module('ModuleUnderTest', function($provide) {
        var windowMock = {
            plugins: {
                anotherPlugin: jasmine.createSpyObj('anotherPlugin', ['foo', 'bar'])
            }
        };

        // substitute all dependencies with mocks
        $provide.value('$window', windowMock);
    });
});

当心,我没有测试过代码,但你应该明白要点。

于 2014-05-12T09:24:18.690 回答