【问题标题】:How to write test spec for an Angularjs service?如何为 Angularjs 服务编写测试规范?
【发布时间】:2014-02-26 17:35:45
【问题描述】:

我几乎没有 Angular 服务来存储和检索数据。如何编写 Jasmine 测试规范来测试此服务?

angular.module("myServices").factory('dataStore', [
    function() {
      var DATASTORE;
      DATASTORE = {};
      return {
        get: function(id) {
          if (DATASTORE[id] != null) {
            return DATASTORE[id];
          } else {
            return null;
          }
        },
        put: function(id, data) {
          return DATASTORE[id] = data;
        }
      };
    }
  ]);

以下规范对我不起作用:

"use strict";
describe("Service: dataStore", function() {
  var store;
  store = null;
  beforeEach(function() {
    module("myServices").inject([
      'dataStore', function(dataStore) {
        return store = dataStore;
      }
    ]);
  });
  it("should return null", function() {
    expect(store.get('some')).toBe(null);
  });
});

【问题讨论】:

    标签: javascript angularjs jasmine angularjs-service


    【解决方案1】:

    阅读此Testing Angular Services Documentation 应该可以帮助您入门

    至于你的问题,在beforeEach块中注入myServices模块,在it块中注入dataStore服务。

    beforeEach(module('myServices'));
    
    it("should return null", 
      inject(function(dataStore) {
        expect(dataStore.get('some')).toBe(null);  
    }));
    

    【讨论】:

      【解决方案2】:

      首先,您应该在beforEach 块中加载您的模块。之后,您可以使用inject 函数 - Angular 和 jasmin 将为您完成剩下的工作。

      "use strict";
      describe("Service: dataStore", function() {
        var store;
      
        beforeEach(module('myServices'));
      
        beforeEach(inject(function(dataStore){
            store = dataStore;
        }));
      
        it("should return null", function() {
          expect(store.get('some')).toBe(null);
        });
      });
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-12-11
        • 1970-01-01
        • 1970-01-01
        • 2016-10-20
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多