我试图弄清楚如果使用我需要的条件在$ 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;在我的代码中,函数触发,但测试未成功通过