Trong Chai, bạn có thể làm những thứ như sau:Các thư viện xác nhận như Chai hoạt động như thế nào mà không phải thực hiện cuộc gọi đến một hàm?
expect({}).to.exist;
exist
không phải là một cuộc gọi chức năng, nhưng điều này vẫn hoạt động trong khuôn khổ kiểm tra. Ngược lại (expect({}).to.not.exist
) khiến các kiểm tra thất bại, nhưng một lần nữa, exist
không phải là một cuộc gọi hàm.
Các xác nhận này hoạt động như thế nào mà không khiến tôi gọi hàm? Trong thực tế, nếu tôi cố gắng nói expect({}).to.exist()
kiểm tra không thành công vì exist
không phải là một hàm.
Điều đó giải thích điều đó như thế nào? Đó là một bước nhảy khá lớn mà không giải thích những gì xảy ra ở giữa – vsync
Bài viết được liên kết thực sự giúp giải thích mọi thứ nếu bạn không quen với getters. Phiên bản ngắn gọn là nhờ có các cải tiến mới cho trình duyệt (-ish), bây giờ bạn có thể kiểm soát một thuộc tính ngoài việc thiết lập nó (ví dụ: 'a.b = 5'). Bây giờ, bạn có thể định nghĩa một phương thức "getter" cho một thuộc tính, và khi bất kỳ mã nào cố đọc giá trị của thuộc tính đó (ví dụ 'console.log (a.b)') trình duyệt sẽ chạy phương thức "getter" đã định nghĩa. Phương pháp đó sau đó có thể kích hoạt logic (ví dụ như logic khẳng định của Chai). Vì vậy, khi bạn làm một 'to.exist', mặc dù không có'() 'sau khi bạn * đang * vẫn gọi một phương thức (phương thức getter). – machineghost