Angularjs单元测试不从SELECT节点建模数据

Angularjs Unit Tests not modeling data from SELECT node

本文关键字:节点 建模 数据 SELECT 单元测试 Angularjs      更新时间:2023-09-26

我是新的angularjs和试图单元测试我的指令。实际上,我首先在一个完全工作的浏览器会话中测试了它,因为它看起来更容易,但我想进入单元测试,因为它是最佳实践。

在我的浏览器会话中,我的指令完全像我期望的那样起作用。它创建了一个<select>标签,该标签使用ng-model绑定到$rootScope上的属性。

然而,当我使用Jasmine语法测试Karma时(正如Angular文档所推荐的),当我更改<select>元素的值时,我无法获得$rootScope上的模型更新。

这是我的Jasmine代码。这是一个代码片段,但我向您保证,下面代码中没有显式定义的变量是使用$inject()正确定义的。我已经测试了他们,以确保他们没有搞砸:

var el = $compile("<my-directive my-model='myModel'></my-directive>")($scope);
//the 'my-model' value, 'myModel', gets assigned during the link phase to:
//$scope.$root.fields[myModel]
var $el = angular.element(el);
$el.find('select').val('someVal');
$rootScope.$digest();
expect($scope.$root.fields[myModel]).toEqual("someVal");
我得到的错误是:
Expected '' to equal 'someVal'

我做错了什么?我是否误解了$digest()阶段?或者ng-model是如何工作的?

好吧,我想我会回答我自己的问题,因为我在这里等待答案时发现了它。

问题是我需要调用.change(),或者在select元素上触发change事件。

所以我今天学到了一些重要的东西!Angular的ng-model指令只会在事件被触发后接收变化。在测试中学习比在调试中学习好,所以我猜单元测试是有效的!