【发布时间】:2015-03-24 00:15:17
【问题描述】:
我使用实习生作为测试框架,使用 sinon 来模拟数据。我不想在单元测试期间访问服务器以获取 http 请求。所以我创建了一个模块,返回 deferred.promise 中的数据,如下所示:
define(["require", ..], function(require, ...) {
function fakerequest(){
dfd = new Deferred();
setTimeout(function(){
deferred.resolve(data);
},100);
return dfd.promise;
}
return fakerequest;
});
这是原始的 AMD 请求模块,它通过 http 请求访问外部服务器:
define(["require", ..], function(require, ...) {
function request(){
dfd = new Deferred();
...
return dfd;
}
return request;
});
这是我想要测试的模块。它对一些数据使用请求函数:
define(["require", ..], function(require, ...) {
var QuerySomething = {
execute: function(){
...
return request();
};
}
return QuerySomething;
});
现在我想测试 QuerySomething 模块,但我不希望它使用原始请求函数,而是使用 fakeRequest 函数。所以在我的实习测试中,我使用 sinon 将原始请求与假请求存根。
registerSuite({
name: 'QuerySomething',
setup: function(){
stub = sinon.stub(request, "request", fakeRequest);
},
teardown: function () {
stub.restore();
},
execute: function(){
queryTask.execute(query).then(function(results){
console.log(results);
});
}
但我收到此错误:
TypeError: Attempted to wrap undefined property request as function
谁能告诉我如何模拟依赖函数?
【问题讨论】:
-
你有方法
request.request吗?当您在其上存根方法时,您从哪里获得对象request? -
其实我没有请求对象。我有一个名为 request 的 AMD 模块,它返回请求函数。我知道我使用了错误的语法。但是找不到任何关于如何在没有对象的情况下存根函数的资源。有什么办法可以解决吗??
标签: javascript unit-testing amd sinon intern