AngularJS 1.2x控制器负载上的Jasmine测试逻辑

时间:2016-05-11 09:04:45

标签: angularjs unit-testing jasmine

我有一个控制器,它有一些在控制器加载时运行的逻辑。

此逻辑检查服务中的值并根据值执行操作。

if(FunkyService.foo()) {
    doA();
} else {
    doB();
}

我想编写一个Jasmine测试,可以测试服务可以拥有的每个值的结果(在本例中,我的服务的函数foo()中为true或false)。

我的问题是控制器是在beforeEach()函数中加载的,这意味着在我的测试中切换服务值为时已晚。如果我在beforeEach()中设置我的服务foo()函数的结果,我就无法理解如何测试真假结果。

我有两个问题。

  • 如何让我的控制器在我的某个测试中重新加载?这将允许我更改服务foo()函数返回值,然后强制控制器在加载时重新运行逻辑。

  • 或者我应该以完全不同的方式接近这个?

1 个答案:

答案 0 :(得分:2)

通过所有单元测试,我已经完成了任何激活或控制器级别的更改,我在单独的描述中进行了说明,在此示例中我假设doA和doB将变量设置为true / false(传入的内容)服务)。

describe("Setting up globals", function() {
  var foo;

  beforeEach(function() {
    foo = false;
  });

  it("is just a function, so it can contain any code", function() {
    expect(foo).toBe(false);
  });

  it("can have more than one expectation", function() {
    expect(true).toEqual(true);
  });

  describe("testing service for true", function() {
    var sut;

    beforeEach(function() {
      sut = new FunkyService(true);
    });

    it("can reference both scopes as needed", function() {
      expect(foo).toEqual(true);
    });
  });



  describe("testing service for false default action", function() {
    var sut;

    beforeEach(function() {
      sut = new FunkyService(false);
    });

    it("can reference both scopes as needed", function() {
      expect(foo).toEqual(false);
    });
  });

});