我有一个控制器,它有一些在控制器加载时运行的逻辑。
此逻辑检查服务中的值,并根据该值执行操作。
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);
});
});
});