2015-08-27 22 views
34

Nếu tôi có mã trong một thử nghiệm không bao giờ nên đạt được (ví dụ: mệnh đề fail của một chuỗi lời hứa), làm cách nào tôi có thể không thực hiện được thử nghiệm?Bắt buộc thử nghiệm hoa nhài

Tôi sử dụng một cái gì đó như expect(true).toBe(false); nhưng điều này không đẹp.

Cách thay thế đang chờ kiểm tra hết thời gian chờ mà tôi muốn tránh (vì nó chậm).

Trả lời

42

Jasmine cung cấp một phương pháp toàn cầu fail(), có thể được sử dụng bên trong khối đặc tả it() và cũng cho phép sử dụng thông báo lỗi tùy chỉnh:

it('should finish successfully', function (done) { 
    MyService.getNumber() 
    .success(function (number) { 
    expect(number).toBe(2); 
    done(); 
    }) 
    .fail(function (err) { 
    fail('Unwanted code branch'); 
    }); 
}); 

này được tích hợp chức năng Jasmine và nó hoạt động tốt ở khắp mọi nơi trong so sánh với phương pháp 'lỗi' tôi đã đề cập bên dưới.

Trước khi update:

Bạn có thể ném ra một lỗi từ đó chi nhánh mã, nó sẽ thất bại một spec ngay lập tức và bạn sẽ có thể cung cấp thông báo lỗi tùy chỉnh:

it('should finish successfully', function (done) { 
    MyService.getNumber() 
    .success(function (number) { 
    expect(number).toBe(2); 
    done(); 
    }) 
    .fail(function (err) { 
    throw new Error('Unwanted code branch'); 
    }); 
}); 

Nhưng bạn nên cẩn thận, nếu bạn muốn ném một lỗi từ bộ xử lý thành công Promise then(), bởi vì lỗi sẽ được nuốt vào đó và sẽ không bao giờ xuất hiện. Ngoài ra, bạn nên biết các trình xử lý lỗi có thể xảy ra trong ứng dụng của mình, điều này có thể gây ra lỗi này bên trong ứng dụng của bạn, do đó, kết quả là sẽ không thể thực hiện kiểm tra.

+7

Ngoài ra còn có 'done.fail ('message')'. – TrueWill

+1

Đối với những người bị mắc kẹt trên một phiên bản cũ của Jasmine, phương pháp 'thất bại' không có sẵn trong 1.3, nhưng có thể được thực hiện một cách hiệu quả bằng cách 'ném thông báo lỗi mới' (message) '. Hiệu quả có thể phụ thuộc vào nhân vật thử nghiệm của bạn - cũng xem xét một cái gì đó như 'mong đợi ('[lý do thất bại]'). ToBeNull()'. – ryanwebjackson

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