使用茉莉花测试角度服务

时间:2016-03-08 10:05:39

标签: angularjs unit-testing jasmine

我在angularJS中测试一个简单的服务时遇到了问题,在阅读了十几个教程和文章后,我的代码没有问题,也许你可以帮助我一点。

我的服务非常简单,所以我不必担心它的代码。它是一个getter / setter服务,包含以下代码:

app.service("GetterSetterService", function() {

  item = "";

  return {
    get: function() {
      return item;
    },
    set: function(value) {
      item = value;
    }
  }
});

当" app"已定义如下:

var app = angular.module('myTestApplication', ["ngMock"]);

我使用Jasmine的测试代码如下:

"use strict";

describe("GetterSetterService", function() {

  var service;

  beforeEach(inject(function(_GetterSetterService_) {
    service = _GetterSetterService_;
  }));

  it("correctly defines the service", function() {
    expect(service).not.toBeUndefined();
    expect(service).not.toBeNull()
  });

  it("has a default value if no value has been set", function() {
    expect(service.get()).toBe("");
  });

  it("correctly sets a value", function() {
    service.set("newValue");
    expect(service.get()).toBe("newValue");
  });
});

但是,如果我留下痕迹,它永远不会通过"注入"回调,因此没有注入服务,并且没有正常工作。有没有人知道什么是错的?我没有得到它,我变得绝望。

谢谢你的时间!

1 个答案:

答案 0 :(得分:0)

这是完整的测试吗?如果是这样,那么您就错过了应用程序定义的加载。 E.g。

beforeEach(module('myTestApplication'));

此外,您不需要将ngMocks注入实际应用程序 - 这只涉及模拟测试,因此您只能将其放在karma.conf.js文件中。

基于以上所述,我认为在测试时你的理解是微不足道的。你需要:

  1. 确保必要的文件包含在karma.conf.js文件中
  2. 使用beforeEach语法加载模块,如上所述
  3. 注意您正在测试的内容 - 您正在进行的操作。
  4. 定义并运行测试