2015-06-15 15 views
7

Chức năng tôi đang theo dõi, nhận đối tượng làm đối số. Tôi cần khẳng định rằng hàm được gọi với các thuộc tính nhất định của đối tượng.Đã được gọi với xác nhận đối tượng

ví dụ: SUT của tôi có:

function kaboom() { 

    fn({ 
     foo: 'foo', 
     bar: 'bar', 
     zap: function() { ... }, 
     dap: true 
    }); 
} 

và trong thử nghiệm của tôi, tôi có thể làm điều này:

fnStub = sinon.stub(); 
kaboom(); 
expect(fnStub).to.have.been.called; 

và làm việc (rất tốt để biết rằng fn 's được gọi là). Bây giờ tôi cần đảm bảo rằng đối tượng thích hợp đã được chuyển vào hàm. Tôi chỉ quan tâm đến các thuộc tính foobar, nghĩa là tôi phải đặt đối sánh cho các thuộc tính cụ thể của đối số. Làm sao?

cập nhật: sinon.match() dường như hoạt động đối với các đối tượng đơn giản. Hãy nâng thanh lên, phải không?

Điều gì sẽ xảy ra nếu tôi muốn đưa hàm zap vào xác nhận? Làm cách nào để tôi thực hiện công việc đó?

Trả lời

12

Giả sử bạn đang sử dụng sinon-chai, bạn có thể sử dụng cùng với calledWithsinon.match để đạt được điều này

expect(fnStub).to.have.been.calledWith(sinon.match({ 
    foo: 'foo', 
    bar: 'bar' 
})); 
+0

nhưng điều đó vì một lý do không làm việc cho tôi, nó sẽ nói rằng các tài sản còn lại không phù hợp . hãy để tôi thử lại, có thể tôi đang làm điều gì sai ở đây – Agzam

+0

thông báo lỗi chính xác mà bạn đang nhận được là gì? Có phải nó nói rằng chức năng của nó không được gọi là gì cả, hay nó nói nó được gọi với các đối số sai? –

+0

Oh thực sự tôi đã tìm thấy những gì không hoạt động. sinon.match với một đối tượng có thuộc tính của hàm. Điều đó không hiệu quả. một cái gì đó giống như 'sinon.match ({foo: sinon.stub()})' không thể tìm ra cách để thực hiện công việc đó – Agzam

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