【发布时间】:2017-01-02 16:52:56
【问题描述】:
我正在为我的应用程序编写 QUnit 测试用例。基本上我有三个文件 如下所示。 DataServices.js 具有执行 ajax 调用的 getObjectDetails 方法 获取数据并在回调中传递结果。
Resolver.js 使用 require 加载 DataServices.js。
我正在为 Proxy.resolve 方法编写测试用例,在其中我想避免实际的 api 调用,为此我在 Test.js 中创建了 DataServices 的模拟对象并调用 Resolver 代理解析方法。
我尝试使用 bind ,但仍然指向 DataServices.js 的实际方法,而不是我在 Test.js 中绑定的方法
DataServices.js
define(["module"], function(module) {
"use strict";
var Details = {
getObjectDetails :function(param,callback){
//API AJAX CALL
// Callback once done
}
};
return {Details : Details }
});
Resolver.js
define(["DataServices"],function(DataServices){
var Proxy= {
resolve : function(){
var Details = DataServices.Details ;
Details.getObjectDetails("xyz", function(result){
// Do Operation After Result
});
}
};
return {Proxy:Proxy}
});
Test.js
define(["Resolver.js" ],function(Resolver){
var DataServices= {
Details : {
getObjectDetails : function(undefined,onSuccess, onError) {
return onSuccess({"X":"Y"});
}
}
};
Resolver.Proxy.resolve.bind(DataServices);
Resolver.Proxy.resolve(); // This is still calling DataServices.js Details
// Not the above muck object
});
在简单的程序中,我想调用模拟 z 函数,而不是 x 内部的 z。 如何做到这一点。
var x = {
z:function(b){
console.log("Z Actual Function..."+b);
},
a : function(){
this.z(3);
}
};
var z = function(b){
console.log("Mock ..."+b)
}
x.a.bind(z);
x.a();
//Z Actual Function...3
但我想要 Mock ...3 打印
【问题讨论】:
标签: javascript jquery unit-testing qunit