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



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

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

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

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

我的问题是,控制器是在beforeEach()函数中加载的,这意味着在我的测试中切换服务值为时已晚。如果我在beforeEach()中设置服务foo()函数的结果,我就不明白如何测试true和false结果。

我有两个问题。

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

  • 还是我应该用一种完全不同的方式来处理这个问题?

对于我所做的所有单元测试,我将任何激活或控制器级别的更改放入单独的描述中。在本例中,我假设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);
    });
  });
});

最新更新