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

Mik*_*378 1 jquery unit-testing jasmine angularjs karma-runner

假设在beforeEach块中暴露此代码的jasmine测试:

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

在一些测试中,我把一个简单的:

console.log($('#email').name);
Run Code Online (Sandbox Code Playgroud)

因此期望价值的输出:email.

但是,我得到了一个undefined.

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

当然,传统的element.find(...)作品很好(虽然只能用于标记名),但我想用Jquery选择器代替.

tas*_*ATT 5

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

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

console.log(element.attr('name'));
Run Code Online (Sandbox Code Playgroud)

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

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

您可以:

console.log(nestedElement.find('#email').attr('name'));
Run Code Online (Sandbox Code Playgroud)

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