2016-08-04 79 views
0

我對Jasmine是完全陌生的,不確定是否正確地處理這個問題。我想測試在我的表dom元素上調用DataTable()方法。這應該發生在成功的Ajax響應上。但是,它在ajax調用中初始化,我不知道如何測試。使ajax調用的javascript函數是updateResults()Jasmine - 從Ajax成功的內部DOM元素上調用測試方法

這是我試過的。

describe('#ajax', function() { 
    var leaderboards, spyOnAjax; 
    var formActionUrl = '/jasmine_test_url'; 

    beforeEach(function() { 
     setFixtures('<div class="lb-container">' + 
      '<form class="leaderboard" action="' + formActionUrl + '">' + 
      '<input type="submit">' + 
      '</form>' + 
      '<div id="result-box">' + 
      '<table class="table-leaderboard"></table> </div>' + 
      '</div>'); 
     leaderboards = new LeaderBoards($('div.lb-container')[0]); 
     spyOnAjax = spyOn($, 'ajax').and.callThrough(); 
     leaderboards.updateResults(); 
    }); 

    describe('when updateResults method is called on leaderboards object', function() { 

     it('initializes DataTables', function() { 
      var table = $('table.table-leaderboard'); 
      spyOn(table, 'DataTable'); 
      expect(table.DataTable).toHaveBeenCalled(); 
     }); 
    }); 
}); 

茉莉花告訴我,它期望間諜數據表被調用。 我似乎沒有正確獲取表格元素。任何建議表示讚賞。

回答

0

有兩種可能性,我看到:

  1. 您要添加的間諜Ajax調用後的數據表已經作出。一般來說,當你進行其他設置時,你應該在beforeEach塊中創建間諜。
  2. 您的ajax調用是異步的,您需要在創建DataTable之前偵聽要解析的調用。

一般來說,你不應該在單元測試中發出ajax請求。所有這些測試應該是獨立的,不要依賴外部服務。

相關問題