2013-02-10 39 views
17

Tôi đang cố gắng tạo ra một gián điệp trên một nhà xây dựng, và xem liệu nó có được gọi hay không - dưới đây là các thử nghiệm của tôi. Tôi đang sử dụng sinon-chai để cú pháp hợp lệ, nhưng cả hai kiểm tra đều thất bại.Đam mê một nhà xây dựng bằng javascript với sinon

var foo = function(arg) { 
}; 

var bar = function(arg) { 
    var baz = new foo(arg); 
}; 

it('foo initialized inside of this test', function() { 
    var spy = sinon.spy(foo); 
    new foo('test'); 
    expect(spy).to.be.called; 
    expect(spy).to.be.calledWith('test'); 
}); 
it('foo initialized by bar()', function() { 
    var spy = sinon.spy(foo); 
    bar('test'); 
    expect(spy).to.be.called; 
    expect(spy).to.be.calledWith('test'); 
}); 
+0

tương tự câu hỏi + anwser: https://stackoverflow.com/questions/32338427/spying-on-date-constructor-with-sinon?rq=1 – Gyuri

Trả lời

5

Vấn đề là Sinon không biết những gì tài liệu tham khảo để do thám, vì vậy giải pháp là để thể sử dụng một đối tượng ví dụ: sinon.spy(namespace, 'foo') hoặc ghi đè lên các tài liệu tham khảo cho mình foo = sinon.spy(foo).

+9

bạn có thể gửi các bài kiểm tra đã sửa? – user1736947

4

Xét constructor của bạn chắc chắn sẽ 'cửa sổ' có nghĩa là nếu bạn mở nhà phát triển giao diện điều khiển trên trình duyệt, bạn sẽ có thể intantiate một đối tượng bằng cách sử dụng các chức năng liên quan/constructor như vậy:

var temp = new FunctionName(); 

Nếu mã làm việc rất thực tế có thể là:

var jamesBond = sinon.spy(window, 'FunctionName'); 
var temp = new FunctionName(args); 

expect(jamesBond.called).to.be.equal(true); 
+1

Cảm ơn bạn! Đã tìm kiếm một cách để làm điều này trong một thời gian dài! – ardal

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