2016-09-20 2 views
1

私はテンプレートを読み込む関数を持っていて、正しいURLが呼び出されていることを確認したいのですが。ジャスミンテスト.load()と呼ばれるURL

私はajax呼び出しでスパイする以外の情報は見つけられませんでしたので、​​呼び出しでも同じことが想定されています。

TypeError: Cannot read property 'mostRecent' of undefined

:私は、私はこのテストを実行すると、私は次のエラーを取得するジャスミン2.4.1

機能

function templateLoader() { 
    var templateURL = '/path/to/template.html'; 
    $('#myElement').load(templateURL, function(response, status, xhr) { 
     if (status === "error") { 
      common.templateError(templateURL, xhr); 
     } else { 
      ns.successFunction(); 
     } 
    }); 
} 

ジャスミンテスト

var templateURL = '/path/to/template.html'; 
spyOn($('#myElement'), "load"); 
templateLoader(); // call the function 
expect($('#myElement').load.calls.mostRecent().args[0]["url"]).toEqual(templateURL); 

を使用しています

別のwはありますか?これを行うには?私はまた、成功関数が呼び出されていることを確認したいが、URLが正しいことを確認するまで私はそれを行うことはできません。

答えて

2

少数の観察:

  • あなたの負荷がAjaxの機能なので、あなたがspyOn$.ajax ではなく$(#myElement).load
  • にあなたが同じのコールURL & successCallBackの両方をチェックすることはできません必要があるだろう ajax関数自体を嘲笑せずに時間を過ごす。これは、お客様の successCallbackが サーバーからの応答を取得した後にのみ実行され、テストが実行されるためです。
  • したがって、ajax呼び出し自体を模擬してfakeFunctionを呼び出して約束を解決します。実際には実行時に成功値が解決されます。つまり実行時には同期的に期待通りの結果が得られます。

注: Iは、以下のコードは、上述したすべてのポイントを示す2.5

ジャスミンを使用します。実際の動作を確認するには、fiddle here

function templateLoader(templateURL) { 
    $('#myElement').load(templateURL, null, function(response, status, xhr) { 
    if (status === "error") { 
     common.templateError(templateURL, xhr); 
    } else { 
     successFunction(); 
    } 
    }); 
} 

successFunction = function() { 
    console.log("This is a success Function"); 
} 

describe("spec to test ajax url", function() { 
    it('test load call url', function() { 
    spyOn($, 'ajax').and.callThrough(); 
    spyOn(window, 'successFunction').and.callThrough(); 
    templateLoader("https://jsonplaceholder.typicode.com/posts/1"); 
    expect($.ajax.calls.mostRecent().args[0]["url"]).toEqual("https://jsonplaceholder.typicode.com/posts/1");  
    }); 

    it('test success function', function(){ 
    spyOn(window, 'successFunction').and.callThrough(); 
    spyOn($, 'ajax').and.callFake(function(e) { 
     return new $.Deferred().resolve({}).promise(); 
    }); 
    templateLoader("https://jsonplaceholder.typicode.com/posts/1"); 
    expect($.ajax.calls.mostRecent().args[0]["url"]).toEqual("https://jsonplaceholder.typicode.com/posts/1");  
    expect(window.successFunction).toHaveBeenCalled(); 
    }); 
}); 
関連する問題