2013-09-16 87 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