我的控制器代码中有这样的东西。
$scope.parsedDisabled = $scope.isDisabled === 'true' ? true : false;
这不在任何类型的函数中运行,它是创建控制器时运行的第一行代码。
因此,当我进行单元测试时,我有类似的东西:
beforeEach(inject(function ($rootScope, $controller, $filter) {
scope = $rootScope.$new();
filter = $filter;
scope.isDisabled = 'true';
controller = $controller('toggleRadioController', {
$scope: scope
});
}));
describe('test stuff', function(){
it('Should set to true', function(){
expect(scope.parsedDisabled).toBe(true);
});
});
所以这一切都很好,但我希望能够运行相同的测试,但将scope.isDisabled设置为'false'
,然后再将其设置为undefined
。我的问题是,在实际加载控制器之前,显然需要将其更改为false和undefined ,在这种情况下我不知道如何做到这一点。我已经尝试过使用嵌套的beforeEach()
,但是我无法使用它。
答案 0 :(得分:0)
首先,按照测试的相同顺序定义包含 isDisabled 值的数组。 然后创建一个计数器,增加 afterEach 测试。最后,将 scope.isDisabled 设置为 array [counter] 。
就是这样:
describe('test stuff', function(){
var disabledValues = ['true', 'false', undefined],
counter = 0;
beforeEach(module('plunker'));
beforeEach(inject(function ($rootScope, $controller, $filter) {
scope = $rootScope.$new();
filter = $filter;
scope.isDisabled = disabledValues[counter];
controller = $controller('toggleRadioController', {
$scope: scope
});
}));
afterEach(function() {
counter += 1;
});
it('"true" should set to true', function(){
expect(scope.parsedDisabled).toBe(true);
});
it('"false" should set to false', function(){
expect(scope.parsedDisabled).toBe(false);
});
it('"undefined" should set to false', function(){
expect(scope.parsedDisabled).toBe(false);
});
});
这是一个plunker。