AngularJs /在jasmine测试中使用jquery选择器不起作用

时间:2013-11-27 09:38:41

标签: jquery unit-testing angularjs jasmine karma-runner

假设在beforeEach块中公开此代码的茉莉花测试:

//....
element = $compile('<input class="form-control" class="email" name="email" id="email" type="email" ng-model="user.email" />')($rootScope);
$rootScope.$digest();
//.....

在某些测试中,我提出了一个简单的说法:

console.log($('#email').name);

因此期望输出值email

但是,我得到undefined

所以我的问题是:默认情况下jquery是否兼容(没有jasmine-jquery插件或其他任何东西)?当然,在我的业力配置中,jquery在angularjs之前加载。

当然,传统的element.find(...)传递效果很好(虽然只能用于标记名),但我想改用Jquery选择器。

1 个答案:

答案 0 :(得分:5)

jQuery id选择器使用document.getElementById()。您编译的元素不是DOM的一部分,这就是console.log($('#email').name);给出undefined

的原因

如果你有一个像你的例子中的单个元素,你只需要这样做:

console.log(element.attr('name'));

只要你在AngularJS find之前加载jQuery就可以使用多个标记名称。所以如果你有一个嵌套元素:

var nestedElement = $compile('<div><input class="form-control" class="email" name="email" id="email" type="email" ng-model="user.email" /></div>')($scope);

你可以:

console.log(nestedElement.find('#email').attr('name'));

工作示例:http://plnkr.co/edit/KRmoWRq8efvb4QhwDXAX?p=preview