2016-03-05 37 views

回答

0

看起來他們增加了chai.spy.returns功能做到這一點,但API似乎有點怪我。我安裝了lastest code from their master branch並做了一些遊戲。這是我試驗過:

var chai = require('chai'), 
    spies = require('chai-spies'); 

chai.use(spies); 
var expect = chai.expect; 
var obj = null; 

describe('funcName', function() { 

    beforeEach(function() { 
    obj = { 
     funcName: function() { 
     return true; 
     } 
    } 
    }); 

    // PASSES 
    it('returns true by default', function() { 
    expect(obj.funcName()).to.be.true 
    }); 

    // PASSES 
    it('returns false after being set to a spy', function() { 
    var spyFunction = chai.spy.returns(false); 
    obj.funcName = spyFunction; 
    expect(obj.funcName()).to.be.false 
    }); 

    // FAILS 
    it('returns false after being altered by a spy', function() { 
    chai.spy.on(obj, 'funcName').returns(false); 
    expect(obj.funcName()).to.be.false 
    }); 

}); 

輸出從運行這些測試是:

funcName 
    ✓ returns true by default 
    ✓ returns false after being set to a spy 
    1) returns false after being altered by a spy 


2 passing (14ms) 
1 failing 

1) funcName returns false after being altered by a spy: 
    TypeError: Object #<Object> has no method 'returns' 
    at Context.<anonymous> (test.js:31:34) 

所以看起來他們要你實例化一個間諜對象有一個返回值,然後更換funcName功能obj與它。你無法窺探一個功能並一舉設定其返回值。

此外,該功能是在October, 2015中添加的,從那時起它們還沒有發佈新版本。我的建議是爲間諜和存根使用更成熟的庫,如Sinon.js。您可以使用自己的Stub API改變一個函數的返回值:

sinon.stub(obj, 'funcName').returns(5); 

末節API提供了許多更多的方式來改變函數的行爲,至今甚至會允許你有完全取代它自定義功能:

var func = function() {...} 

sinon.stub(obj, 'funcName', func); 
1

而不是一個間諜,看看用這個存根。

每文檔:

測試樁與預編程的行爲函數(間諜)。除了可用於更改存根行爲的方法外,它們還支持完整的測試間諜API。

存根有一個「返回」方法來做你正在尋找的東西。

var stub = sinon.stub(); 

stub.returns(54) 

stub(); // 54 
相關問題