如何在Jasmine中模拟DOM元素,以便控制器可以访问它
How to mock DOM element in Jasmine such that the controller can access it?
我正在尝试模拟我的jasmine测试套件中的DOM元素
it('Test changing radio', function () {
testElement = angular.element("<div><input class='my_radio' type='radio' /></div>");
testElement.find('input')[0].checked = true;
var scope = $rootScope.$new();
$compile(testElement)(scope);
scope.$digest();
console.log(testElement.find('input')[0].checked); // should print true
myController.changeRadio();
console.log(testElement.find('input')[0].checked); // should print false
});
在我的控制器中
function changeRadio(){
for(var i = 0; i < angular.element('.testElement').length; i++){
angular.element('testElement')[i].checked = false;
}
}
控制台日志应返回以下
true
false
由于myController.changeRadio
将单选按钮从true更改为false,所以我在运行应用程序时验证了它是否有效,但jasmine测试套件不起作用。我发现控制器根本找不到输入元素。在测试期间,是否有方法将$compiled
DOM传递给控制器?
看起来您的方法是错误的。您正在单元测试中测试HTML元素,但不应该这样做。单元测试仅用于测试代码。使用量角器进行E2E测试是为了测试HTML接口。
例如,我有。。。
<button ng-click="controller.fred()">hello</button>
在我的单元测试中,我调用并测试控制器函数fred。在我的E2E测试中,我点击按钮,并根据我的按钮点击做出与HTML界面相关的期望(例如,检查或不检查某些内容)。
希望这能有所帮助。
相关文章:
- 从AngularJS中的另一个文件中的控制器访问服务
- 如何从AngularJs中的另一个控制器访问控制器
- 从控制器访问mixin属性
- 如何从 angularjs 控制器访问$resource
- AngularJS:从控制器访问特定的指令范围
- 从角度控制器访问模板元素
- 可以't从另一个控制器访问$rootScope
- 如何创建可以使用 AngularJS 上的控制器访问的帮助程序类
- 从 Angular 控制器访问不同模块中的角度服务
- 从服务器控制器访问 MEANjs 中的 API 端点
- 从 angularjs 控制器访问外部 JavaScript 函数和类
- 如何从父指令/控制器访问指令范围
- 角度指令 - 需要从指令控制器访问所需的控制器
- Angular js 指令控制器访问范围属性,但返回未定义
- AngularJS :如何从相同的指令控制器访问指令范围
- 通过控制器访问$rootScope不起作用
- 无法从子控制器访问父控制器的方法
- 有没有办法从木偶.js中的显示控制器访问在列表控制器中创建的布局区域
- 如何与AngularJs在控制器之间共享$scope,我们可以从另一个控制器访问一个控制器的$scope
- 如何以角度将$scope从一个控制器访问到另一个控制器