在第一种情况下,应该未定义产品ID。
var $stateParamsStub = {
scheduleId : undefined
}
在我的控制器中,我正在检查isUpdate是true还是false。如果未定义productId,则意味着isUpdate应该为false,在其他情况下应该为true
$scope.isUpdate = stateParams.scheduleId ? true : false;
我的测试文件
$injector.invoke(myController, this, {
$scope: $scope,
$stateParams: $stateParamsStub
});
我的第一个测试用例按预期工作,因为在注入
时我将stateParams.scheduleId设置为undefined。it('should check update as false', function () {
expect($scope.isUpdate).toBeFalsy();
});
我的案例2失败了
it('should check update as false', function () {
$stateParamsStub = {
productId: "86C07C05-41FB-41E9"
}
$scope.$digest();
expect($scope.isUpdate).toBeTruthy();
});
第二种情况的输出:Expected false to be truthy.
在每个“ 它”执行之前,我知道它正在设置我先前分配的默认值。如何为另一个测试更改该值?所以需要更新的值吗?
答案 0 :(得分:0)
看起来您在指望引用,因此,您必须保存相同的引用。
尝试类似的事情:
it('should check update as false', function () {
$stateParamsStub.scheduleId = "86C07C05-41FB-41E9"; // <-- the change
$scope.$digest();
expect($scope.isUpdate).toBeTruthy();
});
答案 1 :(得分:0)
在您的控制器代码中,我可以看到您正在与scheduleId进行比较:
$scope.isUpdate = stateParams.scheduleId ? true : false;
但是在测试案例中,您正在JSON中设置productId。将测试用例和控制器与JSON中的单个属性对齐
答案 2 :(得分:0)
由于状态参数只能通过在beforeEach部分中执行的注入传递,因此我们无法对其进行修改。 因此,我直接更新了控制器作用域值
it('should check update as true', function () {
$scope.isUpdate=true // <-- the change
$scope.$digest();
expect($scope.isUpdate).toBeTruthy();
<-- did some other testing based on this condition -->
}
感谢所有花时间阅读我的问题并提供可能答案的人。 });