测试函数是否已在$ scope内调用。$ watch

时间:2015-08-31 05:02:58

标签: angularjs unit-testing karma-jasmine

我试图弄清楚如果使用我需要的条件在$ watch内执行函数,如何测试karma jasmine。

这是控制器中的内容。 $ watch包含几个条件。

 $scope.$watch('player', function (newVal, oldVal) {
    if (oldVal && newVal != undefined && newVal != oldVal) {
        if (newVal.email == oldVal.email && newVal.emWallet == oldVal.emWallet)
            $scope.saveSettings();
    }
}, true)

这是测试的一部分

it('when player property is changed saveSettings calls', function () {

    var sspy = spyOn(scope, "saveSettings");
    expect(scope.player.email).toEqual('');
    expect(scope.player.emWallet).toEqual('');

    expect(scope.player.balance).toEqual(10.0000);

    //change player balance
    scope.player.balance = 10.0304;
    scope.$apply();

    expect(scope.player.email).toEqual('');
    expect(scope.player.emWallet).toEqual('');

    expect(sspy).toHaveBeenCalled();

});

在上面的测试中,我改变了外部条件的属性,所以player.email和player.emWallet仍然相同,并且期望在内部调用saveSettings()函数,但得到" sspy从来没有被称为"错误。

如果有人指出正确的方向,我会非常感激。

更新: 当我改变实际值scope.player.balance = 10.0304;在我的代码中,函数触发,但测试未成功通过

0 个答案:

没有答案