rdo*_*dev 7 unit-testing angularjs karma-runner
所有,
我有一个AngularJS控制器的单元测试套件,它遵循以下模式beforeEach()
:
var ResourcesCtrl,
scope, rootScope, loc, ctrl;
// Initialize the controller and a mock scope
beforeEach(inject(function ($controller, $location) {
scope = {};
rootScope = {};
loc = $location;
ctrl = $controller;
scope.instanceName = 'TestInstance';
ResourcesCtrl = $controller('ResourcesCtrl', {
$scope: scope,
$rootScope: rootScope,
$location: loc
});
}));
Run Code Online (Sandbox Code Playgroud)
然后是一堆it()
带有断言的块/期望所有块都按预期工作.
现在我需要做的是,在我添加的一个测试用例中,改变了值scope.instanceName
; 但是,看起来即使我在it()
测试用例中更改了它的值,也没有反映在控制器的范围内.我已经尝试在测试用例中使用新范围实例化控制器,但这也没有用.
所以我的问题如下:如何更改/覆盖在beforeEach()
设置中传递给控制器的变量?
这里的问题是调用$controller
发生在beforeEach中,使用当时可用的任何范围变量.您希望能够在调用控制器之前更改scope
变量.一种选择是使用在每个规范中调用的函数,以便您可以精确控制控制器何时被调用:init
beforeEach(inject(function ($controller, $location) {
scope = {};
rootScope = {};
loc = $location;
ctrl = $controller;
scope.instanceName = 'TestInstance';
this.init = function() {
ResourcesCtrl = $controller('ResourcesCtrl', {
$scope: scope,
$rootScope: rootScope,
$location: loc
});
}
}));
...
it("should do something", function() {
scope.instanceName = "NewName";
this.init();
...
});
Run Code Online (Sandbox Code Playgroud)
请注意,这意味着this.init
必须在文件中的每个规范中调用.
归档时间: |
|
查看次数: |
3276 次 |
最近记录: |