2012-03-22 51 views
15

QUnit có một xác nhận để kiểm tra xem hàm có đặt ra một ngoại lệ (QUnit/raises) hay không. Có thể - bằng cách sử dụng QUnit - để khẳng định rằng hàm không tăng ngoại lệ.Làm thế nào để khẳng định rằng một hàm không làm tăng ngoại lệ

tôi nhận ra rằng chúng ta có thể kiểm tra nó như thế nào trong đoạn mã sau:

try { 
    theTest(); 
    ok(true); 
} catch (e) { 
    ok(false, "Expected to succeed"); 
} 

Nhưng tôi nghĩ rằng nó nên được có thể sử dụng QUnit. Bất kì manh mối nào?

+0

việc kiểm tra này http://stackoverflow.com/questions/10190392/asserting-that-a-function-ném-ngoại lệ-với-qunit nó có thể giúp – hanane

Trả lời

15

Không có phương pháp như vậy trong QUnit

Tuy nhiên, nếu bạn chỉ cần viết đoạn mã sau đó là ngắn hơn nhiều, bạn sẽ nhận được kết quả tương tự với các lợi ích thêm vào một số

theTest(); 
ok(true, "My function does not crash"); 

1/Nếu mã của một thử nghiệm làm tăng một ngoại lệ, qunit sẽ đánh dấu thử nghiệm là không thành công.

2/Nếu bạn đánh dấu vào "không try/catch" hộp kiểm, bạn sẽ có thể để gỡ lỗi nơi ngoại lệ được ném ra, mà không phải là trường hợp với thử của bạn/catch

+0

Tất nhiên! Điều đó khá đơn giản. Và có vẻ hơi quá đơn giản để tôi tìm ra. Cảm ơn bạn đã trả lời :) – anissen

+3

Khi nó quay ra, điều này hơi quá đơn giản. Nếu hàm tăng ngoại lệ, kiểm tra không thành công * nếu không có * thông báo lỗi. Nếu hàm không tăng ngoại lệ, thử nghiệm thành công như mong đợi. Thư trong ok() - xác nhận không bao giờ được sử dụng. – anissen

+0

Lưu ý rằng bạn có lẽ cũng nên thêm một cuộc gọi để mong đợi() bên trong hàm test() của bạn để số xác nhận cũng có thể được xác minh theo cách đó. – Krinkle

2

tôi đã có vấn đề tương tự như bạn đã đề cập trong nhận xét trong đó kiểm tra của tôi mà kiểm tra không có Error được ném sẽ dừng "xấu" hiển thị thông báo được định dạng sai Died on test #1 mà không có bất kỳ thông tin hữu ích nào.

Tôi đã kết thúc bằng cách sử dụng kết hợp cả hai; raises() cho một thử nghiệm và try/catch cho một thử nghiệm khác.

tôi đã sử dụng tăng lương() cho kỳ thi này mà kiểm tra rằng một Error được ném ra, tương tự như sau:

test("When myFunction() is called with a invalid instance Then Error is thrown", function() { 
    // Arrange 
    var testInstance = {}; 

    // Act 
    raises(function() { 
     myFunction(testInstance); 
    }, Error, "myFunction() should throw an Error"); 

    // Assert 
    // raises() does assertion 
}); 

Nếu ném một Error tất cả là tốt và nếu không phải là một thông điệp được định dạng đẹp sẽ được hiển thị trên, tương tự như sau:

myFunction() should throw Error 
Result: No exception was thrown. 

sau đó tôi sử dụng try/catch cho các bài kiểm tra mà phải đảm bảo không có Error được ném ra, tương tự như sau:

012.
test("When myFunction() is called with a valid instance Then no Error is thrown", function() { 
    // Arrange 
    var testInstance = new myObject(); 
    var result; 

    // Act 
    try { 
     myFunction(testInstance); 
     result = true; 
    } catch(error) { 
     result = false; 
    } 

    // Assert 
    ok(result, "myFunction() should not throw an Error"); 
}); 

Nếu ném trên không Error tất cả là tốt và nếu một Error được ném nhắn được định dạng đẹp được hiển thị, tương tự như sau:

myFunction() should not throw an Error 
Source: ... 
+0

Ở trên dựa trên giả định rằng bạn đang thử nghiệm các lỗi được tùy chỉnh được quản lý và 'myFunction()' của bạn thực hiện một lỗi mới. ...) 'đưa ra một điều kiện không hợp lệ nhất định. Bạn không nên kiểm tra các lỗi không mong muốn trong khóa học. – Nope

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