2013-01-25 29 views
22

Tôi thực sự mới sử dụng JavaScript cũng như Jasmine. Vì vậy, nó có thể là một cái gì đó thực sự rõ ràng rằng sửa chữa vấn đề của tôi, nhưng tôi không thể nhìn thấy nó.Làm gián điệp trên console.error() với Jasmine

Tôi muốn kiểm tra xem các cuộc gọi ứng dụng JavaScript (đã tồn tại) console.error() trong khi đang tải hay chưa. Tôi không thực sự thấy cách nhận ra điều này với Jasmine. Tôi đã bao gồm tệp JavaScript cũng như tệp spec trong SpecRunner.html. Nhưng tôi lấy nó rằng tôi bằng cách nào đó cần phải "nhanh chóng" ứng dụng để kiểm tra nếu nó ném bất kỳ lỗi nào trên bàn điều khiển, phải không?

Hoặc tôi chỉ nên bao gồm mã SpecRunner.html cho mục đích này vào mã HTML của ứng dụng?

Trả lời

38

Bạn có thể do thám console.error như thế này:

beforeEach(function(){ 
    spyOn(console, 'error'); 
}) 

it('should print error to console', function(){ 
    yourApp.start(); 
    expect(console.error).toHaveBeenCalled(); 
}) 
+0

Yeah, đó là những gì tôi đã giả. Nhưng điều này sẽ không làm được. Nó có thể có liên quan đến cách ứng dụng được cấu trúc. Nhưng cảm ơn vì sự giúp đỡ! – Christian

+0

Được rồi, tôi đã kiểm tra lại, thực hiện một số chỉnh sửa và nó đã hoạt động. Tôi đoán tất cả những gì tôi cần là sự đảm bảo rằng đây là cách thực tế nó nên hoạt động. Cảm ơn một lần nữa! – Christian

+1

Hiện tại, việc sử dụng '.and.clickThrough();' hoặc 'and.callFake (function() {...})' thực hiện hơn là để nguyên hàm thường, sử dụng Jasmine 2.x. Hy vọng rằng sẽ giúp. C§ – CSS

0

Bạn có thể ghi đè lên các chức năng console.error tiêu chuẩn như thế này:

//call the error function before it is overriden 
console.error('foo'); 

//override the error function (the immediate call function pattern is used for data hiding) 
console.error = (function() { 
    //save a reference to the original error function. 
    var originalConsole = console.error; 
    //this is the function that will be used instead of the error function 
    function myError() { 
    alert('Error is called. '); 
    //the arguments array contains the arguments that was used when console.error() was called 
    originalConsole.apply(this, arguments); 
    } 
    //return the function which will be assigned to console.error 
    return myError; 
})(); 

//now the alert will be shown in addition to the normal functionality of the error function 
console.error('bar'); 

giải pháp này làm việc với Jasmin hoặc bất cứ điều gì khác. Chỉ cần đặt mã ở trên trước khi các mã khác và bất kỳ cuộc gọi nào sau này đến console.error() sẽ gọi hàm bị ghi đè.

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