我正在尝试从我的控制器的init函数测试函数调用。我基于stateParams路由各种逻辑,并希望针对这种情况编写单元测试,但是我无法使其工作。
我的初始化功能
var _init = function () {
// Get full companyList
servicecall().then(function (response) {
if ($stateParams.ID) {
$scope.callOne();
}
else if ($stateParams.Index == -1) {
$scope.callTwo();
}
else if ($stateParams.Index == '' || $stateParams.Index == null) {
$scope.callThree();
}
else
$scope.callFour();
},
function (err) {
console.log(err);
});
};
_init();
所以我只想设置$ stateParams.Index = -1,并确保调用callTwo()。
我的beforeEach看起来像
beforeEach(function () {
controller = $controller('Controller', {
$scope: $scope,
$stateParams: $stateParams,
$state: $state
});
// And add $scope's spyOns
spyOn($scope, 'callOne').and.callThrough();
spyOn($scope, 'callTwo').and.callThrough();
spyOn($scope, 'callThree').and.callThrough();
spyOn($scope, 'callFour').and.callThrough();
});
起初我尝试了以下,当然没有用;它说间谍没有被召唤。
it("should call callTwo if stateParams.index is -1", function () {
$stateParams.Index = -1;
expect($scope.callTwo()).toHaveBeenCalled();
});
我认为所有的init都是在我的间谍附加之前发生的,所以我尝试将那些东西移到我的电话中但是一切都崩溃了。
这句话说callTwo已经被监视了。
it("should call callTwo if stateParams is -1", function () {
$stateParams.Index = -1;
spyOn($scope, 'callTwo').and.callThrough();
controller = $controller('Controller', {
$scope: $scope,
$stateParams: $stateParams,
$state: $state
});
expect($scope.callTwo).toHaveBeenCalled();
});
但是如果我在初始化控制器之后移动间谍声明,则说它不会再被调用
答案 0 :(得分:1)
不确定它是否是最佳解决方案,但目前没有其他任何想法,这肯定有效。
每次此类测试都可以private void PressKey(object sender, KeyPressEventArgs e)
{
var process = new Thread(this.LoadData);
process.Start();
}
private void LoadData()
{
CheckForIllegalCrossThreadCalls = false;
this.dgv.ScrollBars = ScrollBars.None;
this.dgv.Columns.Clear();
this.dgv.DataSource = MyDataTable;
this.dgv.ScrollBars = ScrollBars.Both;
}
,因为在创建控制器时会注入describe
。这就是为什么在$stateParams
内部进行此操作是不够的,因为那时的it
属于已经创建的控制器。
所以你需要:
$scope
因此,在此示例中,您将拥有的所有describe('Controller tests for when Index === -1', function () {
beforeEach(function (...) {
$stateParams.Index = -1;
controller = $controller('Controller', {
$scope: $scope,
$stateParams: $stateParams,
$state: $state
});
}
// it tests for Index === -1 case
});
测试都保证it
。同样适合你的其他价值观。