2013-04-25 27 views
25

Tôi đang chơi với Karma runner thử nghiệm (http://karma-runner.github.io/0.8/index.html) sử dụng qunit (http://qunitjs.com). Tôi đã tạo thành công và chạy thử nghiệm đơn giản (100% JavaScript), nhưng bây giờ tôi đang cố gắng sử dụng các đồ đạc HTML để kiểm tra mã tương tác với các nút DOM. Tôi có thể tải những đồ đạc bằng cách tuyên bố họ trong "tác phẩm" theo cách này:Tôi có thể sử dụng đồ đạc HTML với nhân viên thử nghiệm Karma bằng Qunit như thế nào?

{pattern: 'fixtures/myfixture.html', watched: true, served: true, included: false} 

nó được phục vụ bởi máy chủ nghiệp, nhưng tôi không hiểu làm thế nào tôi có thể truy cập vào DOM của nó :(

giả sử vật cố của tôi là một tập tin html đơn giản chứa đánh dấu sau:?

<div id="container">hello world</div> 

Làm thế nào tôi có thể viết một bài kiểm tra đó có thể truy cập vào nút đó (div) các "tài liệu" có liên quan đến " context.html "tệp trong thư mục" tĩnh "như tôi biết ... vậy HTM ở đâu L của vật cố của tôi ??

+0

Kiểm tra câu trả lời của tôi ở đây: http://stackoverflow.com/questions/15214760/unit-testing- angularjs-directive-with-templateurl/16528985 # 16528985 –

Trả lời

23

Tôi không sử dụng AngularJS ... Tôi đã giải quyết bằng cách sử dụng hoa nhài-jquery: https://github.com/velesin/jasmine-jquery (Tôi chỉ sử dụng hoa nhài cho các đồ đạc, kiểm tra của tôi vẫn được viết bằng cách sử dụng qunit). Trong tập tin cấu hình của tôi, tôi có những điều sau đây:

frameworks = ['qunit', 'jasmine']; 

    files = [ 

     JASMINE, 
     JASMINE_ADAPTER, 
     QUNIT, 
     QUNIT_ADAPTER, 

     // dependencies 
     {pattern: 'src/main/webapp/js/libs/jquery/jquery-1.8.3.js', watched: false, served: true, included: true}, 
     {pattern: 'src/test/js/lib/jasmine-jquery.js', watched: false, served: true, included: true}, 

     // fixtures 
     {pattern: 'src/test/js/**/*.html', watched: true, served: true, included: false}, 
     {pattern: 'src/test/js/**/*.json', watched: true, served: true, included: false}, 
     {pattern: 'src/test/js/**/*.xml', watched: true, served: true, included: false}, 

     // files to test 
     {pattern: 'src/test/js/**/*.js', watched: true, served: true, included: true} 
    ]; 

sau đó trong các tập tin thử nghiệm của tôi:

module("TestSuiteName", { 
    setup: function() { 
     var f = jasmine.getFixtures(); 
     f.fixturesPath = 'base'; 
     f.load('src/test/js/TestFixture.html'); 
    }, 
    teardown: function() { 
     var f = jasmine.getFixtures(); 
     f.cleanUp(); 
     f.clearCache(); 
    } 
}); 
+0

Bạn làm việc tốt. Bạn vẫn cần phải có JASMINE và JASMINE_ADAPTER trong cấu hình mặc dù? – NickL

+8

Để làm cho nó hoạt động cho tôi, tôi phải thêm "preprocessors: {'**/*. Html': []}". Điều này để loại bỏ bộ xử lý trước html2js được bật theo mặc định cho tôi trong Karma 0.10 –

+0

[Thảo luận về vấn đề github liên quan về tiền xử lý trong Karma] (https://github.com/karma-runner/karma/issues/788). – jfroom

8

Nếu bạn đang sử dụng AngularJS, bạn có thể sử dụng trình xử lý trước html2js. Ví dụ về cách thực hiện điều đó là https://github.com/vojtajina/ng-directive-testing.

Các tệp html này được phân phối bởi Karma, nhưng chúng không được bao gồm trong trang, do đó bạn sẽ phải tìm nạp chúng - có thể thông qua yêu cầu xhr.

Đây là một tiền xử lý tương tự, có thể chuyển đổi file html vào một chuỗi JS (không chặt chẽ để kiễu góc): https://github.com/karma-runner/karma-html2js-preprocessor Bạn có thể thấy làm thế nào để sử dụng nó trong các thử nghiệm E2E: https://github.com/karma-runner/karma-html2js-preprocessor/tree/master/e2e-test

LƯU Ý: đây html2js tiền xử lý là không phải là một phần của Karma 0.8 và plugin chỉ hoạt động với Karma 0.9+ (hiện tại trong kênh canary), vì vậy bạn phải sử dụng canary (có chứa nhiều thay đổi; -)) ...

+0

Tôi cũng thực sự quan tâm đến việc thử nghiệm DOM với nghiệp. Điều này sẽ có sẵn trong các bản phát hành trong tương lai hay tôi nên tìm cách giải quyết? Tôi có thể sẽ không sử dụng Angular cho nó ... – zigomir

+0

Chỉ cần sử dụng phát hành y học hoàng đạo (nó cuối cùng sẽ trở thành ổn định ;-) và sử dụng plugin karma-html2js-preprocessor, vốn không chặt chẽ với AngularJS. – Vojta

+1

Làm thế nào để cài đặt bản phát hành canary vào npm? Xin lỗi vì câu hỏi ngớ ngẩn. –

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