Hướng dẫn javascript stub
Show
Bài viết được dịch từ Best Practices for Spies, Stubs and Mocks in Sinon.js, có chỉnh sửa bổ sung để cập nhật một số thay đổi trong Sinon.1. Giới thiệuKiểm thử mã nguồn với Ajax, timeout, cơ sở dữ liệu hoặc các yếu tố phụ thuộc khác có thể rất khó khăn. Ví dụ: nếu bạn sử dụng Ajax, bạn cần phải chạy server để trả về response cho request . Với cơ sở dữ liệu, bạn cần có một cơ sở dữ liệu thử nghiệm được thiết lập cho các kiểm thử của bạn. Tất cả điều này có nghĩa là việc viết và chạy các các đoạn test sẽ khó khăn hơn, bởi vì bạn cần phải chạy ứng dụng, thiết lập môi trường, các thứ các thứ. Ơn giời ! Chúng ta có thể sử dụng Sinon.js để tránh tất cả những rắc rối trên. Chúng ta có thể sử dụng các tính năng của nó để đơn giản hóa các trường hợp cần kiểm thử chỉ với một vài dòng mã. Tuy nhiên, bắt đầu với Sinon có thể khá khó khăn. Bạn phải làm quen với nhiều khái niệm từ fake, spies đến stub, mock, nhưng có thể khó chọn khi nào nên sử dụng cái gì. Bạn sẽ lúng túng không biết trường hợp này sẽ dùng chức năng gì ? Trong bài viết này, chúng tôi sẽ chỉ cho bạn thấy sự khác biệt giữa spies, stub và fake, khi nào và làm thế nào để sử dụng chúng. 2. Ví dụChúng ta có hàm sau
Hàm này có hai tham số - một Object chứa dữ liệu cần lưu và một callback function. Chúng tôi gán các trường dữ liệu từ đối tượng 3.Spies, Stubs, Mocks và FakeCả Spies, Stubs và Mocks thuộc dạng kiểm thử kép (tests doubles). Kiểu như diễn viên đóng thế trong các phim hành động, họ diễn những cảnh nguy hiểm để tránh chấn thương, đảm bảo an toàn cho các diễn viên chính. Kiểm thử kép cũng ná ná như vậy, sẽ không động đến các thành phần trong hệ thống database thật, dữ liệu thật mà sẽ mô phỏng chúng. 4. Khi nào thì cần dùng kiểm thử képĐể hiểu rõ nhất khi sử dụng kiểm thử kép, chúng ta cần hiểu hai loại hàm khác nhau mà chúng ta có thể có. Chúng ta có thể chia các hàm thành hai loại:
Các hàm không có tác dụng phụ rất đơn giản: kết quả của một hàm như vậy chỉ phụ thuộc vào các tham số của nó - hàm luôn trả về cùng một giá trị khi được cung cấp cho cùng các tham số. Một hàm ngoại tức là một hàm phụ thuộc vào một cái gì đó bên ngoài, chẳng hạn như trạng thái của một đối tượng, thời gian hiện tại, một lời gọi đến cơ sở dữ liệu, v.v trạng thái. Kết quả của một hàm như vậy có thể bị ảnh hưởng bởi nhiều thứ ngoài các tham số của nó. Nếu chúng ta muốn kiểm tra 5. Khi nào sử dụng SpiesDúng như tên gọi của nó nghĩa là gián điệp, được sử dụng để lấy thông tin từ các lời gọi hàm. Ví dụ, một spy có thể cho chúng ta biết số lần một hàm được gọi, các đối số mà mỗi lần gọi, giá trị nào được trả về, lỗi nào được đưa ra, v.v. Như vậy, spy là một lựa chọn tốt khi mục tiêu kiểm thử là để xác minh điều gì đó đã xảy ra. Kết hợp với các assertion của Sinon, chúng ta có thể kiểm tra nhiều kết quả khác nhau bằng cách sử dụng một spy đơn giản. Các tình huống phổ biến nhất khi sử dụng spy là:
Kiểm tra xem hàm được gọi bao nhiêu lần
Kiểm tra tham số nào đã được truyền vào hàm
6. Khi nào sử dụng StubStub giống như spy, ngoại trừ ở chỗ chúng sẽ thay thế luôn hàm cần kiểm thử. Chúng cũng có thể chứa hành vi tùy chỉnh, chẳng hạn như trả về giá trị hoặc throw ra ngoại lệ. Thậm chí nó còn có thể tự động gọi bất kỳ callback function đã được cung cấp tham số. Stub có một vài trường hợp sử dụng phổ biến:
Stub có thể được sử dụng để thay thế đoạn mã có vấn đề, tức là đoạn mã đó làm cho việc viết test khó khăn. Điều này thường liên quan đến các vấn đề bên ngoài như kết nối mạng, cơ sở dữ liệu hoặc các hệ thống không phải JavaScript khác. Vấn đề là chúng thường yêu cầu thiết lập thủ công. Ví dụ: chúng ta sẽ cần điền vào cơ sở dữ liệu với dữ liệu thử nghiệm trước khi chạy thử nghiệm, điều này làm cho việc chạy và viết test cho chúng trở nên phức tạp. Thay vào đó, nếu chúng ta bỏ tương tác trực tiếp với đoạn mã đấy, chúng ta có thể tránh hoàn toàn vấn đề này. Ví dụ trước đây của chúng ta sử dụng
Bằng cách thay thế chức năng liên quan đến cơ sở dữ liệu bằng một stub, chúng ta không còn cần một cơ sở dữ liệu thực tế cho thử nghiệm của mình. Một cách tiếp cận tương tự có thể được sử dụng trong gần như mọi tình huống liên quan đến mã mà khó kiểm thử. Stub thiết lập kịch bản trả về của hàm. Nếu đoạn test gọi đến một hàm khác, đôi khi chúng ta cần kiểm tra xem nó sẽ hoạt động như thế nào trong
các điều kiện bất thường - phổ biến nhất là nếu có lỗi. Chúng ta có thể sử dụng
Thứ ba, Stub có thể được sử dụng để đơn giản hóa việc test code bất đồng bộ.
7. Khi nào sử dụng MocksBạn nên cẩn thận khi sử dụng Mocks nên được sử dụng cùng với stubs, nhưng cần xác minh nhiều hành vi cụ thể hơn trên đó. Ví dụ: ở đây, cách thức chúng ta có thể kiểm thử một kịch bản lưu vào cơ sở dữ liệu cụ thể hơn bằng cách sử dụng mocks.
Trong thử nghiệm này, chúng ta sử dụng 8. Fake trong Sinon
Không giống như Tạo một Fake
Thiết lập giá trị trả về cho fake
sinon.fake.yields
|