2014-09-16 21 views
8

Chúng tôi đang chạy thử nghiệm đơn vị Jasmine của chúng tôi bằng cách kết hợp Karma và PhantomJS trên máy chủ xây dựng. Chạy thử nghiệm cục bộ trên Chrome hoạt động tốt, lỗi không xảy ra ở đó (đó là một câu hỏi khác). Đây là những gì đang xảy ra:Thoát khỏi PhantomJS sau khi xảy ra lỗi cú pháp khi chạy thử nghiệm đơn vị

Tại một thời điểm trong việc thực hiện, kiểm tra chạy vào một lỗi "không xác định" và chỉ đơn giản dừng lại:

PhantomJS 1.9.7 (Mac OS X) ERROR 
    TypeError: 'undefined' is not an object (evaluating 'dropScope.resize') 
    at /Users/nwinkler/workspaces/.../foo.js:250 
PhantomJS 1.9.7 (Mac OS X): Executed 654 of 1221 ERROR (14.512 secs/14.386 secs) 
DEBUG [karma]: Run complete, exitting. 
DEBUG [launcher]: Disconnecting all browsers 

Ngay cả khi chạy nghiệp với --force cờ, nó vẫn tồn tại vào thời điểm này .

Có cách nào để Karma/PhantomJS tiếp tục chạy thử nghiệm mà không dừng lại ở điểm này không? Tại sao PhantomJS không thể phục hồi từ lỗi này?

Tôi không tìm kiếm giải pháp cho lỗi undefined, đó là một chủ đề khác - tôi chỉ muốn hiểu tại sao PhantomJS và Karma thoát tại thời điểm này và không tiếp tục với các bài kiểm tra đơn vị còn lại.

+0

Chờ đợi một câu trả lời trên này cũng có. .. –

+0

Điều này xảy ra với bộ ứng dụng của tôi cũng không phụ thuộc vào trình duyệt. Tôi đang cố gắng kiểm tra CKEditor và trong các thử nghiệm của chúng tôi, chúng tôi tạo các trình chỉnh sửa giả tạo gây ra lỗi js nhưng khi bạn đang cố gắng xác nhận một số loại thay đổi, lỗi js khiến Karma ngừng hoạt động kiểm tra. – branchgabriel

+1

Cập nhật: Khi bộ phần mềm của chúng tôi vượt quá 800 đến 1000+ kiểm tra, các lỗi này có vẻ như bị xếp chồng lên nhau và gây tắt máy. Tôi đã thấy rằng việc thay đổi thứ tự tải trong mảng tập tin sẽ giúp nhưng nó ngăn cản chúng ta sử dụng globs để bao gồm các thử nghiệm. Karma chỉ nên thất bại trên khẳng định không phải lỗi. – branchgabriel

Trả lời

0

Tôi thường sử dụng mã này để cảnh báo về lỗi và tiếp tục chạy (phantomjs)

phantom.onError = function(msg, trace) { 
    var msgStack = ['PHANTOM ERROR: ' + msg]; 
    if (trace && trace.length) { 
    msgStack.push('TRACE:'); 
    trace.forEach(function(t) { 
     msgStack.push(' -> ' + (t.file || t.sourceURL) + ': ' + t.line + (t.function ? ' (in function ' + t.function +')' : '')); 
    }); 
    } 
    console.error(msgStack.join('\n')); 
    //phantom.exit(1); // do not stop 
}; 

nếu bạn đang sử dụng một đối tượng trang:

page.onError = function(msg, trace) { 
    // never display errors 
    var msgStack = ['SITE ERROR: ' + msg]; 
    if (trace && trace.length) { 
    msgStack.push('TRACE:'); 
    trace.forEach(function(t) { 
     msgStack.push(' -> ' + (t.file || t.sourceURL) + ': ' + t.line + (t.function ? ' (in function ' + t.function +')' : '')); 
    }); 
    } 
    console.error(msgStack.join('\n')); 
} 
+0

Bạn đặt mã này vào đâu trong cấu hình của mình? Trong tệp cấu hình Karma, hoặc trong tệp mã tùy chỉnh mà bạn đưa vào với các thử nghiệm của mình? – nwinkler

+0

Tôi đặt mã này ngay trên thử nghiệm đầu tiên trong tệp mã. – Eun

+0

@Eun Mã này không có hiệu lực đối với tôi. Tôi đã thử thêm nó vào đầu của thử nghiệm đầu tiên của tôi, cũng trong mã phantom launcher. Không có hiệu lực. Bạn có thể cụ thể hơn về nơi mà điều này cần phải đi. Phiên bản nào của ma bạn đang sử dụng để làm công việc này cho bạn? Tôi không thể tìm thấy hàm onError, điều này được cho là ghi đè trong phantomjs.js. – branchgabriel

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