Tôi đang cố gắng tìm hiểu cách hạn chế các thử nghiệm của mình để người báo cáo chỉ xem xét một chức năng được đề cập khi thử nghiệm được viết cụ thể là cho chức năng đó.Cách chỉ định các chức năng/phương pháp nào cần được kiểm tra bằng cách sử dụng Karma, Jasmine và Istanbul
Ví dụ sau từ PHPUnit doc thấy khá tốt những gì tôi cố gắng để đạt được:
Các @covers chú thích có thể được sử dụng trong mã kiểm tra để xác định các phương pháp (s) một phương pháp thử nghiệm muốn thử nghiệm :
/**
* @covers BankAccount::getBalance
*/
public function testBalanceIsInitiallyZero()
{
$this->assertEquals(0, $this->ba->getBalance());
}
Nếu thử nghiệm trên sẽ được thực hiện, chỉ có chức năng getBalance
sẽ được đánh dấu là được bảo hiểm, và không ai khác.
Bây giờ, một số mẫu mã thực tế từ các thử nghiệm JavaScript của tôi. Xét nghiệm này cho thấy các hành vi không mong muốn mà tôi cố gắng để thoát khỏi:
it('Test get date range', function()
{
expect(dateService.getDateRange('2001-01-01', '2001-01-07')).toEqual(7);
});
Thử nghiệm này sẽ đánh dấu chức năng getDateRange
như bảo hiểm, mà còn bất kỳ chức năng khác mà được gọi từ bên tronggetDateRange
. Bởi vì điều này quirk bảo hiểm mã thực tế cho dự án của tôi có lẽ là thấp hơn rất nhiều so với mức độ bảo hiểm mã được báo cáo.
Làm cách nào để ngăn chặn hành vi này? Có cách nào để làm cho Karma/Jasmine/Istanbul hành xử theo cách tôi muốn, hay tôi cần phải chuyển sang một khuôn khổ khác để thử nghiệm JavaScript?
Điều cần lưu ý là sử dụng tính năng tiêm phụ thuộc và mocks để giảm số lượng cuộc gọi đến mã sản xuất thực tế. – henrikmerlander
Tôi đồng ý với henrikmerlander. Bên cạnh đó, nếu bạn đang sử dụng các cuộc gọi chức năng thực sự thay vì mocks bên trong phương pháp thử nghiệm gián tiếp bạn đang thử nghiệm chức năng đó – ejosafat