2013-09-16 125 views
0

監測庫中我有以下代碼來測試使用興農:與興農

var req = new MultiPartUpload({ 
    client: client, 
    objectName: "/" + obj.func.destPath(), 
    stream: obj.outStream, 
    headers: headers 
    }, function (err, body) { 
    obj.debug('uploaded' + body); 
    }); 

我一定要考這個對象的創建。我該怎麼做?我曾嘗試過:

var MultiPartUpload = require('knox-mpu'); 
var stub = sinon.createStubInstance(MultiPartUpload); 
instance(obj, function() { 
    expect(stub).to.have.been.called; 
    done(); 
}); 

但它沒有按預期工作。任何建議?謝謝:)

編輯:

實例是創建MultiPartUpload對象的對象的istance。問題是無法更改實例簽名,並且在創建實例的文件中需要MultiPartUpload庫。

總之:我必須監視MultiPartUpload庫,問題是無法以任何方式與使用庫的istance進行通信。

+0

什麼是「實例」? –

+0

對不起,我編輯了這個問題回答:) – Filnik

回答

0

只有這樣,才能使其工作,我發現是這樣的:而不是具有:

var MultiPartUpload = require('knox-mpu'); 

在實例代碼中。我把它改爲:

MultiPartUpload = require('know-mpu'); 

然後在測試情況下,我簡單地說:

MultiPartUpload = sinon.spy(); 

instance(obj, function() { 
    expect(MultiPartUpload).to.have.been.called; 
    done(); 
}); 

任何方式做到這一點比這更好? (我不喜歡全球變數)。謝謝:)

1

從文檔:

用給定函數作爲protoype和存根 所有實現的功能的新對象。給定的構造函數是不是 調用

這意味着sinon.createStubInstance(MultiPartUpload);將返回一個新的存根與所有的原型功能存根。我認爲你正在尋找一種方式來窺探如果MultiPartUpload函數被調用,這樣的一種方式可以覆蓋MultiPartUpload與存根:

var MultiPartUpload = require('knox-mpu'); 
var stub = sinon.stub().returns(sinon.createStubInstance(MultiPartUpload)); 
MultiPartUpload = stub; 
instance(obj, function() { 
    expect(stub).to.have.been.called; 
    done(); 
}); 
+0

感謝您的回答!但它不起作用,它回答:「預計存根被稱爲至少一次,但它從來沒有被稱爲」 任何其他的想法? :) – Filnik

0

你看過像https://github.com/felixge/node-sandboxed-module?當您需要實例模塊時,可以使用SandboxedModule替代間諜knox-mpu

編輯:我不能給出一個完整的工作示例,因爲您沒有給我們所有的代碼。但沙盒模塊的工作原理如下:

var SandboxedModule = require('sandboxed-module') 
    , MultiPartUploadSpy = sinon.spy() 
    , expect = chai.expect 
    , YourInstanceModule = SandboxedModule.require('your-instance-module', { 
     requires: {'knox-mpu': MultiPartUploadSpy} 
    }) 

instance(obj, function() { 
    expect(MultiPartUploadSpy).to.have.been.called; 
    done(); 
}); 
+0

呃,你會如何使用它?我從來沒有使用它,但使用例如在自述文件中給出的代碼,我看到MySQL是假的,但你會如何窺視它是否被調用? – Filnik