2016-08-04 45 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请求。所有这些测试应该是独立的,不要依赖外部服务。

相关问题