javascript - 测试 AngularJS 服务初始化

标签 javascript angularjs unit-testing

我有一个 AngularJS 服务,它在“初始化”(即在工厂函数中)时从 localStorage 加载数据,如下所示:

module.service('myService', function ($localStorage) {
    var data = $localStorage.data;
    if (!isValid(data)) // isValid omitted on purpose, not relevant.
      data = undefined;

    return {
      getData: function() {
        return data;
      }
      setData: function(value) {
        if (isValid(value))
          data = value;
      }
    };
}

在我的测试中,我想检查 data 是否实际从 localStorage 加载,如果该值存在并且有效;这不是关于测试 isValid,而是关于使用它和 $localStorage 的服务初始化。

我希望能够在我的测试中调用 myService 工厂。因为我还需要测试 myService 的方法,所以我在 beforeEach Hook 中获得了它的初始化实例。我想我需要为我的特定初始化测试创建一个不同的实例,但由于服务在 AngularJS 中是单例的,我不确定这是否可以完成。

describe('myService', function() {
  myService = $localStorage = null;

  beforeEach(module('app'));

  beforeEach(inject(function($injector) {
    myService = $injector.get('myService');
    $localStorage = $injector.get('$localStorage');
  });

  it('should look for stuff in localStorage on creation', function () {
    $localStorage.data = 'my data';
    // I'd like to call service factory here!!
    myService.getData().should.equal('my data');
  });
});

这能实现吗?我的代码是否具有难以测试的结构,或者我是否不尊重“Angular 方式”并且应该以不同的方式进行?

最佳答案

试试这个:

describe('myService', function() {
  myService = $localStorage = null;

  beforeEach(module('app'));

  beforeEach(inject(function($injector) {
    $localStorage = $injector.get('$localStorage');
    $localStorage.data = 'my data';
    myService = $injector.get('myService');
  });

  it('should look for stuff in localStorage on creation', function () {
    myService.getData().should.equal('my data');
  });
});

关于javascript - 测试 AngularJS 服务初始化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21958339/

相关文章:

java - Angular 和文件上传

java - 如何在单元测试(junit)中管理巨大的类和重构

javascript - 摆脱多余的代码?

javascript - 通过 Meteor 中的拖动事件防止默认

angularjs - 如何在输入字段中自动插入小数

python - 尝试实现 python TestSuite

unit-testing - 如何在 vscode 扩展单元测试中获取 extensionContext?

javascript - 或 if 语句中的条件无法正常工作

c# - 如何显示图片裁剪区域

javascript - AngularJS slider 自定义值