对于使用jasmine的前端单元测试,我想在我的应用程序中模拟我的所有请求。
我已经实现了一个模拟所有代理的方法。
proxy: appname.classes.proxy.ProxyNegotiator.getModelProxy("User")
并且此方法执行以下操作:
getModelProxy: function(config) {
var url = this.getUrl(config);
if (this.getProxyType() == 'api') {
return appname.classes.proxy.WebApiProxy.getModelProxy(url);
} else if (this.getProxyType() == 'test') {
return appname.classes.proxy.LocalTestProxy.getModelProxy(url);
}
return undefined;
}
所以你可以想象,根据我的ProxyType配置,我得到了web api代理或本地代理进行测试。我现在已经完成了我的粗暴行动..
不过,我还有另外一个问题要处理.. 我在我的应用程序中确实有一些其他请求(验证用户名):
//check if Username is Valid
Ext.Ajax.request({
url: '/api/User',
method: 'GET',
async: false,
params: { id: user.get('Id'), username: user.get('UserName') },
failure: function(response, opts) {
myErrors.push({
field: 'UserName',
message: appname.locale.ErrorInvalidUsername
});
}
});
我确实有一些麻烦嘲笑这个Ext.Ajax.request的东西......我已经在网上搜索过,并没有找到任何好的解决方案。 模拟此请求的最佳做法是什么?我很高兴你能给我的每一个暗示和/或想法。请帮忙!
答案 0 :(得分:2)
从4.0.7开始的所有Ext JS版本都带有Ext.ux.ajax.SimManager类。它不包含在基础库构建中,但是未分解的源代码位于Ext JS文件夹的examples/ux/ajax
下。
要使用它,请使用定义返回数据的Simlet配置注册URL。
Ext.onReady(function () {
Ext.ux.ajax.SimManager.init({
delay: 500 // Simulates network latency/server processing time
}).register({
'/api/User': {
stype: 'json', // stype is what kind of Simlet you want to use
data: [
// JSON response data, if needed
]
}
});
});
然后你像平常一样发出Ajax请求,SimManager将通过注册的Simlet重新路由请求。
答案 1 :(得分:1)
我会查看sinon js做你的ajax嘲笑。我们目前正在使用它在我们的Ext重型应用程序中编写单元测试。 http://sinonjs.org/docs/#fakeServer
您应该能够使用以下内容测试您的ajax请求:
{
setUp: function () {
this.server = sinon.fakeServer.create();
},
tearDown: function () {
this.server.restore();
},
"test user" : function () {
this.server.respondWith("GET", "/api/User,
[500, { "Content-Type": "application/json" },
'[{ "id": 12, "comment": "Hey there" }]']);
Ext.Ajax.request({
url: '/api/User',
method: 'GET',
async: false,
params: { id: user.get('Id'), username: user.get('UserName') },
failure: function(response, opts) {
myErrors.push({
field: 'UserName',
message: appname.locale.ErrorInvalidUsername
});
}
});
this.server.respond();
//assert myErrors
}
}