2016-06-21 19 views
5

Tôi biết cách sử dụng sơ khai để thay thế một hàm.Làm cách nào để khai thác một chuỗi các phương pháp trong Sinon?

sandbox.stub(Cars, "findOne", 
      () => {return car1 }); 

Nhưng bây giờ tôi có một dòng trong chức năng của tôi, tôi muốn kiểm tra rằng tôi cần phải còn sơ khai trông như thế này

Cars.find().fetch() 

Vì vậy, có một chuỗi các chức năng ở đây và tôi không chắc chắn những gì Tôi cần phải làm. Làm thế nào để tôi có thể "tìm" để trả lại thứ gì đó mà tôi có thể sử dụng để khai thác "tìm nạp"?

Trả lời

4

Hãy thử điều này:

sandbox.stub(Cars, "find",() => { 
    return { 
     fetch: sinon.stub().returns(anything); 
    }; 
}); 
+0

nhờ mà làm việc một cách hoàn hảo! – Diskdrive

+1

Got 'stub (obj, 'meth', fn) đã bị xóa, xem tài liệu ' –

+0

thật hữu ích khi thêm rằng Sinon gợi ý: Sử dụng sandbox.stub (obj,' meth '). CallsFake (fn) thay vào đó để đặt một hàm. Sử dụng giá trị sandbox.stub (obj, 'meth'). (Fn) thay vào đó để tạo một giá trị không hoạt động. – keligijus

0

Đây là cách tiếp cận khác mà cũng cho phép gián điệp vào chuỗi các phương pháp jQuery - mà đã cho tôi một thời gian dài để tìm ra.

Trong ví dụ này, tôi đang cố gắng để kiểm tra rằng một trường email được xóa ra

//set up stub and spy 
    const valSpy = sandbox.spy(); 
    const jQueryStub = sandbox 
     .stub($.prototype, "find")  // this prototype is important 
     .withArgs("input[name=email]") 
     .returns({ val: valSpy }); 

    // call function under test 
    learnerAlreadyAccepted(inviteDoc); 

    // check expectations 
    expect(jQueryStub).to.have.been.called;  // not really necessary 
    expect(valSpy).to.have.been.calledWith(""); 

và chức năng được kiểm tra là (xấp xỉ):

learnerAlreadyAccepted = function(doc) { 
    $("form").find("input[name=email]").val(""); 
    } 
Các vấn đề liên quan