我使用superagent ajax库作为应用程序,我正在尝试为它编写一些单元测试。我有一个看起来像这样的课程:
someClass = {
getData: function(){
_this = this;
superagent.get('/some_url').end(function(res){
if(res.body){
_this.data = res.body
}
});
});
}
如何编写Jasmine测试以监听_this.data = res.body
电话?在and.callThrough()
上设置getData
的间谍工作并不起作用。我不想实际调用相关网址;我只是试图测试一下,如果它获得了数据,它会对它做些什么。
由于
答案 0 :(得分:3)
=SUMPRODUCT(--(G2:G1000 > 0),E2:E1000)+SUM(G2:G1000)
答案 1 :(得分:0)
Bror的答案非常有效。要在他的答案中添加一些内容,当我们需要向set
方法添加另一个超级函数(如spyOn
)时,您可以按如下方式使用。
spyOn(superagent, 'get').and.callFake(function(url) {
return {
set: function() {
return {
end: function(cb) {
//null for no error, and object to mirror how a response would look.
cb(null, {body: data});
}
}
}
});
此处,set函数用于为请求设置标头。
答案 2 :(得分:0)
这里有另一个很好的解决方案,即抽象出匿名函数:
someClass = {
getData: function(){
_this = this;
superagent.get('/some_url').end(this.handleAjax);
},
handleAjax: function(res){
if(res.body){
_this.data = res.body
}
}
}
现在,您可以通过简单的测试离散地测试handleAjax函数;还有stub superagent,因为你只需要检查一个方法.end()
,并使用特定值调用它。
匿名函数是problematic for other reasons,而不仅仅是测试,因此这是一个很好的重构
答案 3 :(得分:0)
说它是补丁,首先制作模拟补丁返回值:
e1
然后将其作为patch的值返回:
e2
然后监视“mock”补丁对象的set函数:
"Action": [
"logs:CreateLogGroup",
"logs:CreateLogStream",
"logs:PutLogEvents",
"logs:PutMetricFilter",
"logs:PutRetentionPolicy"
],