2017-07-13 39 views
6

sự khác biệt giữaTại sao sử dụng spyOn thay vì jasmine.createSpy?

jasmine.createSpy ('someMethod')

spyOn (someObject, 'someMethod')

Và tại sao là gì nên chọn sử dụng spyOn?

Tôi đoán là phương án thay thế đầu tiên sẽ khớp với phương thức someMethod cho dù đối tượng nào có chứa nhưng spyOn sẽ chỉ khớp nếu nó chứa trong someObject. Do đó làm cho createSpy chỉ là một matcher chung hơn?

+0

hey, đã [answer] (https://stackoverflow.com/a/45074442/2545680) có trợ giúp không? –

Trả lời

11

Sự khác biệt là bạn nên có một phương pháp trên đối tượng với spyOn

const o = { some(): { console.log('spied') } }; 
spyOn(o, 'some'); 

trong khi phương pháp mô hình được tạo ra cho bạn với createSpy():

const o = {}; 
o.some = jasmine.createSpy('some'); 

Ưu điểm của spyOn là bạn có thể gọi phương thức gốc:

spyOn(o, 'some').and.callThrough(); 
o.some(); // logs 'spied' 

Và như @estus nói phương pháp gốc được khôi phục sau khi thử nghiệm trong trường hợp spyOn. Điều này nên được thực hiện thủ công khi được gán lại.

+1

Quan trọng hơn, phương pháp gốc được khôi phục sau khi thử nghiệm trong trường hợp 'spyOn'. Điều này nên được thực hiện thủ công khi được gán lại với 'o.some ='. – estus

+0

@estus, cảm ơn bạn đã thêm) –

1

Ngoài ra câu trả lời tốt khác:

  • Sử dụng spyOn() để do thám (đánh chặn) một phương pháp đang tồn tại trên một đối tượng để theo dõi các cuộc gọi của các module khác với nó.
  • Sử dụng jasmine.createSpy() để tạo một hàm có thể được chuyển qua dưới dạng gọi lại hoặc xử lý Promise để theo dõi số lần gọi lại.
Các vấn đề liên quan