如何更改$ scope变量值并测试angularjs茉莉花

时间:2018-08-24 06:20:36

标签: angularjs testing jasmine karma-runner

在第一种情况下,应该未定义产品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.

在每个“ ”执行之前,我知道它正在设置我先前分配的默认值。如何为另一个测试更改该值?所以需要更新的值吗?

3 个答案:

答案 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 -->
}

感谢所有花时间阅读我的问题并提供可能答案的人。 });