2017-06-02 20 views
5

Tôi đang chạy thử nghiệm Karma thông qua jenkins. Thông thường khi một thử nghiệm thất bại nó cho thấy tên thử nghiệm và số lượng thử nghiệm nhưng trong một số trường hợp nó chỉ hiển thị số.Theo thứ tự nào Karma chạy thử nghiệm của nó?

Karma có chạy thử nghiệm theo một thứ tự cụ thể không? Giống như bảng chữ cái?

Dưới đây là ảnh chụp màn hình đầu ra giao diện điều khiển của tôi trên jenkins.

enter image description here

Trả lời

4

Nó không phải là Karma tự xác định thứ tự mà kiểm tra được chạy. Thành phần mà chủ yếu là xác định thứ tự của các thử nghiệm là người thử nghiệm bạn quyết định sử dụng với Karma. Nếu bạn sử dụng Mocha, thì logic của Mocha sẽ được sử dụng. Nếu bạn sử dụng Jasmine, thì logic của Jasmine sẽ được sử dụng. Nếu bạn sử dụng cái gì khác, thì một số logic khác sẽ được sử dụng. Ví dụ:

Ví dụ: Mocha chạy các thử nghiệm theo thứ tự trong đó describeit được gọi trong tệp thử nghiệm. Nếu bạn có hai tệp thử nghiệm a.jsb.jsa.js được thực thi trước, thì Mocha sẽ chạy thử nghiệm trước tiên theo số a.js. Nếu b.js được thực hiện trước, thì Mocha sẽ chạy các thử nghiệm trong b.js trước tiên. Không có phân loại nào được thực hiện bởi Mocha. (Mocha có một tùy chọn sort, nhưng nó chỉ được sử dụng khi sử dụng công cụ dòng lệnh mocha để chạy Mocha trong Nút. Nó không áp dụng cho sử dụng Mocha trong Karma vì Karma chạy Mocha trong trình duyệt, nơi Mocha không hỗ trợ sort.)

Nếu bạn sử dụng trình tải mô-đun (như RequireJS hoặc SystemJS) để tải tệp thử nghiệm động, điều này làm phức tạp mọi thứ. Nếu bạn làm require(["a", "b"]) và hai mô-đun không phụ thuộc vào nhau, thì thứ tự mà chúng tải không xác định. a có thể tải trước tiên hoặc b có thể tải trước để thứ tự các thử nghiệm được chạy có thể không phù hợp với lần chạy thử tiếp theo. Bạn có thể buộc đơn đặt hàng thông qua cấu hình hoặc bằng cách thực hiện các cuộc gọi require. (Ví dụ, giả sử một lần nữa module mà không phụ thuộc vào nhau, require(["a"],() => require("b")) đảm bảo rằng các bài kiểm tra trong a sẽ thực hiện trước khi những người trong b.)

Một biến chứng nữa là một số vận động viên kiểm tra sẽ hủy bỏ một hoạt động kiểm tra nếu họ xác định rằng bộ thử nghiệm của bạn là lỗi. Điều này không thay đổi thứ tự của các bài kiểm tra nhưng có thể làm cho nó trông giống như các bài kiểm tra bị thiếu. Mocha, ví dụ, xem xét các lỗi trong các móc được sử dụng để thiết lập và xé bỏ dữ liệu thử nghiệm (bằng cách phản đối các lỗi trong bản thân kiểm thử) là các lỗi trong bộ thử nghiệm của bạn và sẽ hủy bỏ chạy. Nếu ba bài kiểm tra của bạn phụ thuộc vào mã thiết lập không thành công, Mocha sẽ chỉ bỏ qua các bài kiểm tra. Bạn sẽ thấy một thất bại trong ba bài kiểm tra, không phải ba thất bại. Dưới đây là một tập tin thử nghiệm ví dụ với 3 bài kiểm tra và thất bại trong móc before. (Các móc before, aka "trước khi tất cả" là có nghĩa là để được sử dụng để thiết lập dữ liệu thử nghiệm trước khi một nhóm các bài kiểm tra.)

before(() => { 
    throw new Error("oh no!"); 
}); 

it("one",() => {}); 

it("two",() => {}); 

it("three",() => {}); 

Dưới đây là karma.conf.js tôi:

module.exports = function(config) { 
    config.set({ 
    basePath: '', 
    frameworks: ['mocha'], 
    files: [ 
     'test.js' 
    ], 
    exclude: [ 
    ], 
    preprocessors: { 
    }, 
    reporters: ['progress'], 
    port: 9876, 
    colors: true, 
    logLevel: config.LOG_INFO, 
    autoWatch: false, 
    browsers: ['Chrome'], 
    singleRun: false, 
    concurrency: Infinity 
    }) 
} 

Dưới đây là đầu ra (tôi đã thay thế tem thời gian với <ts>):

<ts>:INFO [karma]: Karma v1.7.0 server started at http://0.0.0.0:9876/ 
<ts>:INFO [launcher]: Launching browser Chrome with unlimited concurrency 
<ts>:INFO [launcher]: Starting browser Chrome 
<ts>:INFO [Chrome 58.0.3029 (Linux 0.0.0)]: Connected on socket qfNuMyp4q3SyUBOsAAAA with id 24880742 
Chrome 58.0.3029 (Linux 0.0.0) "before all" hook FAILED 
     Error: oh no! 
      at Context.before (test.js:3:11) 
Chrome 58.0.3029 (Linux 0.0.0): Executed 1 of 3 (1 FAILED) ERROR (0.013 secs/0.001 secs) 

Nó nói "đã thi 1 trong tổng số 3" vì nó đã thử thực hiện thử nghiệm đầu tiên nhưng nỗ lực này thất bại trong móc before vì vậy Mocha không cố gắng chạy bất kỳ thử nghiệm nào sau này.

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