Javascript:如何用Jasmine监视superagent?

时间:2014-12-18 19:28:08

标签: ajax unit-testing jasmine superagent

我使用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的间谍工作并不起作用。我不想实际调用相关网址;我只是试图测试一下,如果它获得了数据,它会对它做些什么。

由于

4 个答案:

答案 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"
],