8

アプリにスーパーエージェント ajax ライブラリを使用しており、その単体テストを作成しようとしています。次のようなクラスがあります。

someClass = {
  getData: function(){
    _this = this;
    superagent.get('/some_url').end(function(res){
      if(res.body){
        _this.data = res.body
      }
     });
   });
 }

_this.data = res.body呼び出しをスパイする Jasmine テストを作成するにはどうすればよいですか? and.callThrough()onでスパイを設定してもうまくいきgetDataません。問題の URLを実際に呼び出したくはありません。データを取得した場合、それで何かを行うことをテストしようとしています。

ありがとう

4

4 に答える 4

3
spyOn(superagent, 'get').and.callFake(function(url) {
  return {
    end: function(cb) {
      //null for no error, and object to mirror how a response would look.
      cb(null, {body: data});
    }
  }
});
于 2015-07-14T16:02:07.113 に答える
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 関数を使用して、リクエストにヘッダーを設定しています。

于 2015-08-07T11:50:01.467 に答える