2015-02-06 13 views
7

Tôi đang xây dựng các thử nghiệm chỉ thị trong Angular sử dụng Jasmine. Tôi có một bài kiểm tra ví dụ nhỏ mà trông như thế này:Thử nghiệm góc với Jasmine không thể so sánh nút html

it("should compare html node", inject(function ($compile, $rootScope) { 
    var elm = angular.element('<input>'); 
    elm = $compile(elm)($scope); 
    $scope.$digest(); 
    console.log('btn', elm); // output: '<input class="ng-scope">' 
    expect(elm).toBe('<input class="ng-scope">'); 

    expect(elm[0]).toBe('<input class="ng-scope">'); // these also fail 
    expect(elm.html()).toBe('<input class="ng-scope">'); // "" 
})); 

Vì vậy, tôi nhận được đầu ra dự kiến ​​ra cửa sổ Console, nhưng Jasmine phàn nàn với một lỗi Expected { length: 1, 0: HTMLNode } to be '<input class="ng-scope">'

Tôi cũng đã cố gắng sử dụng elm[0] mang đến cho các lỗi tương tự và elm.html() nhưng điều đó chỉ trả về một chuỗi rỗng. Làm thế nào tôi có thể so sánh nút HTML với chuỗi chính xác?

NB Tôi biết đây là một thử nghiệm không thực tế, nhưng tôi chỉ muốn giới thiệu vấn đề hiện tại của mình.

+0

có thể thử elm [0] .outerHTML – hassassin

+0

Wow! Điều này thực sự hoạt động. Tôi có thể tìm thấy nó được ghi lại trong API (https://docs.angularjs.org/api/ng/function/angular.element). Nếu bạn muốn làm cho nó thành một câu trả lời tôi sẽ chấp nhận. Cảm ơn. –

Trả lời

10

Vì vậy, elm là angular.element là đối tượng jqLite. Khi bạn chỉ ra bạn có thể sử dụng elm [0] để có được phần tử dom thực tế. Sau đó, bạn có thể truy cập vào html của nút bằng cách truy cập vào trường .outerHTML. Vì vậy, giải pháp cuối cùng của chúng tôi là sử dụng

elm[0].outerHTML 
0

Khi làm xét nghiệm Jasmine của tôi, tôi sẽ kiểm tra element.html() vì vậy tôi sau đó có thể sử dụng jQuery để tìm kiếm các điều kiện cụ thể như

expect(element.html()).toContain($('input.ng-scope')); 

tôi đã đi sâu hơn và cố gắng để xem về so sánh HTMLNode để HTMLNode nhưng tôi tin rằng đây là một hạn chế của Jasmine. Bạn có thể thử,

expect(element[0]).toEqual($.parseHTML('<input class="ng-scope">')[0]) 

Nhưng Jasmine trả lại "HTML dự kiếnNhiều bằng HTMLNode". Cách tốt nhất để tốt nhất là phân tích phần tử HTML đã biên dịch như được hiển thị ở trên với các trường hợp thử nghiệm khác nhau.

+0

element.html() đôi khi trả về chuỗi rỗng, trong đó elm [0] .outerHTML trả về HTML – Hoto

Các vấn đề liên quan