2017-02-03 17 views
0

私のモジュールにはAJAX呼び出しを行う関数があり、成功するとその関数はユーザをリダイレクトします。ジャスミンでその機能をテストしたかったのですが、ページをリロードしないようにすることはできません。私はリロードページ機能をスパイ私のテストではJasmine spyOnが元の関数を呼び出す

function my_func() { 
    $.ajax({ 
     // parameters 
     success: function(data) { 
      // does something 
      reloadPage(path); 
     } 
    }); 
}  
function reloadPage(path) { 
    console.log('got here'); 
    window.location.href = path; 
} 

:ここ

は私の機能です

spyOn($, 'ajax').and.callFake(function(options) { 
    options.success(data); 
}); 
spyOn(my_module, 'reloadPage'); 
my_module.my_func(); 

そして、私は私のテストを実行したとき、私はこの取得:

LOG LOG: 'got here' 
Firefox 42.0.0 (Linux 0.0.0) ERROR 
    Some of your tests did a full page reload! 

reloadPageはスパイに置き換えられてはならず、呼び出されてはいけませんか?私はすべての関連するコード部分を含んでいます、それは文字通りちょうどですが、あなたが私にもっと多くの情報を提供する必要があるなら私に教えてください!

+0

でそれを見ることができ、あなたはスパイのセットアップの順序を入れ替える試みたことがありますか? – Dan

+0

はい、同じエラーです。 – Vedran

答えて

1

あなたのコードには、ウィンドウのリロード(reloadPage関数)への偽の呼び出しがありません。 また、成功関数からのthisの参照がありません。

あなたのコードを変更した方法は次のとおりです。 あなたは、アクションhere

var my_module = { 
    my_func: function() { 
    var self = this; 
    $.ajax({ 
     url: 'abc', 
     success: function(path) { 
     // does something 
     self.reloadPage(path); 
     } 
    }); 
    }, 
    reloadPage: function(path) { 
    console.log('got here'); 
    window.location.href = path; 
    } 
} 

describe('reload page test', function() { 
    it('test reload', function() { 
    spyOn(my_module, 'reloadPage').and.callFake(function(e) { 
     console.log("This is a spy call for reload page"); 
    }); 
    spyOn($, 'ajax').and.callFake(function(e) { 
     e.success('some window url path'); 
    }); 
    my_module.my_func(); 
    expect(my_module.reloadPage).toHaveBeenCalled(); 
    }) 
}); 
+0

それはトリックでした。どうもありがとうございました! – Vedran

関連する問題