2013-02-28 33 views
11

Chai có phương thức include. Tôi muốn kiểm tra xem một đối tượng có chứa một đối tượng khác không. Ví dụ:Chai.js: Đối tượng chứa/bao gồm

var origin = { 
    name: "John", 
    otherObj: { 
    title: "Example" 
    } 
} 

Tôi muốn sử dụng Chai để kiểm tra xem đối tượng này chứa sau (mà nó)

var match = { 
    otherObj: { 
    title: "Example" 
    } 
} 

Việc làm này không xuất hiện để làm việc:

origin.should.include(match) 

Trả lời

9

Xác nhận bao gồm và chứa có thể được sử dụng làm hoặc chuỗi ngôn ngữ dựa trên thuộc tính hoặc làm phương pháp để xác nhận việc bao gồm đối tượng trong một mảng hoặc chuỗi con trong một chuỗi . Khi được sử dụng làm chuỗi ngôn ngữ, chúng sẽ chuyển đổi cờ chứa cho xác nhận khóa. [nhấn mạnh mỏ]

Vì vậy, nếu bạn đang gọi bao gồm một đối tượng (không phải mảng hoặc chuỗi), thì nó chỉ phục vụ để bật cờ chứa cho xác nhận phím. Bởi vẻ ngoài của ví dụ của bạn, thử nghiệm cho bình đẳng sâu sẽ có ý nghĩa hơn, có thể kiểm tra cho chìa khóa đầu tiên.

origins.should.include.keys("otherObj"); 
origins.otherObj.should.deep.equal(match.otherObj); 

Trên thực tế, bây giờ tôi duyệt các ví dụ khác, bạn có lẽ sẽ hạnh phúc với điều này:

origins.should.have.deep.property("otherObj", match.otherObj) 
+1

Tôi đã đọc các tài liệu, nhưng đôi khi bạn cần thêm một chút ngữ cảnh, bạn biết không? Cảm ơn câu trả lời này. –

+1

Đó là sự thật, tôi không có ý định có ý nghĩa về nó. Nó chỉ là các tài liệu cho chai thực sự là khá tuyệt vời so với hầu hết các tài liệu tôi gặp phải (chúng bao gồm các ví dụ và tất cả mọi thứ! = P). Tôi vui vì tôi đã có thể giúp đỡ –

18

Hei, vừa công bố chai-tập hợp con. Hãy kiểm tra này: https://www.npmjs.org/package/chai-subset này nên làm việc cho bạn)

var chai = require('chai'); 
var chaiSubset = require('chai-subset'); 
chai.use(chaiSubset); 

var obj = { 
    a: 'b', 
    c: 'd', 
    e: { 
     foo: 'bar', 
     baz: { 
      qux: 'quux' 
     } 
    } 
}; 

expect(obj).to.containSubset({ 
    e: { 
     foo: 'bar', 
     baz: { 
      qux: 'quux' 
     } 
    } 
}); 
+0

Mô-đun tuyệt vời, cảm ơn bạn! –

+0

Plugin hay, nhưng câu trả lời này phải bao gồm ví dụ sử dụng, nếu không bạn có thể bị gắn cờ. – gustavohenke

+0

@gustavohenke thx cho thông báo, thêm – eagleeye

-1

Trong Chai 1.5.0 bạn sẽ tìm thấy phương pháp tiện dụng

includeDeepMembers 

http://chaijs.com/releases/

+1

Tôi đã bỏ phiếu này nhưng thực sự sai. includeDeepMembers chỉ hoạt động trên các mảng, không phải các đối tượng. – nhjk

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