2013-04-14 17 views
19

sự khác biệt giữaHiểu suất Sinon.js của(), năng suất(), và callsArg()

  • stub.yield([arg1, arg2, ...])
  • spy.yields([arg1, arg2, ...])
  • stub.callsArg(index)

trong thư viện Sinon.js còn sơ khai là gì ?

stub.yield() là người duy nhất mà tôi đã có thể nắm bắt:

stub = sinon.stub(API, 'call_remote'); 
    callback = sinon.spy(); 
    API.call_remote('help', callback); 
    @stub.yield("solution!"); 
    @stub.calledOnce.should.be.true; 
    @callback.calledOnce.should.be.true; 
    @callback.args[0][0].should.eql("solution!"); 

Như thử nghiệm với should.js, sẽ có tất cả khẳng định vượt qua.

Có mẫu thử tương tự cho stub.yields()stub.callsArg(index) không?

Tài liệu không cung cấp bất kỳ ví dụ nào để làm rõ hai phương pháp khác này nhưng tôi tò mò về chúng.

Trả lời

22

tôi tin rằng các phương pháp, như được nêu trong tài liệu hướng dẫn, như sau:

  • spy.yield
  • stub.yields
  • stub.callsArg

Sự khác biệt chính giữa yieldscallsArg thể được tìm thấy trong tài liệu của sinon về sản lượng:

Nếu một phương thức chấp nhận nhiều hơn một cuộc gọi lại, bạn cần phải sử dụng callsArg để có sơ đồ gọi các cuộc gọi lại khác so với lệnh gọi đầu tiên.

yields sẽ gọi hàm luận đầu tiên nó gặp với bất kỳ đối số tùy chọn bạn cung cấp cho nó. callsArg sẽ cố gắng gọi đối số hàm tại số được chỉ định trong đối tượng arguments của cuộc gọi đó và không chuyển bất kỳ đối số nào cho nó (bạn có thể sử dụng callArgWith cho hành vi đó).

spy.yield rất giống với stub.yields ngoại trừ nó là một phần của API gián điệp và nó gọi tất cả các cuộc gọi lại được chuyển đến nó.

Dưới đây là một số ví dụ chứng minh sự khác biệt (tha thứ cho tôi nếu ví dụ là một chút giả tạo):

Sản lượng:

var fn = sinon.expectation.create().withArgs(1, 2); 
var stub = sinon.stub().yields(1, 2); 
stub(fn); 
fn.verify(); 

CallsArg:

var f1 = sinon.expectation.create().never(); 
var f2 = sinon.expectation.create().once(); 
var stub = sinon.stub().callsArg(1); 
stub(f1, f2); 
f1.verify(); 
f2.verify(); 

Năng suất:

var f1 = sinon.expectation.create().once(); 
var f2 = sinon.expectation.create().once(); 
var stub = sinon.stub().yield(); 
stub(f1, f2); 
f1.verify(); 
f2.verify(); 
+0

Xem thêm: http: // blo g.inadram.com/sinon-stub-by-example/ – hellboy

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