我对Jasmine完全不熟悉,不确定我是否正确接近。我想测试在我的table dom元素上调用DataTable()
方法。这应该发生在成功的ajax响应上。但是,它在ajax调用中初始化,我不知道如何测试它。进行ajax调用的javascript函数是updateResults()
。
这是我尝试过的。
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();
});
});
});
Jasmine告诉我,已经调用了预期的间谍DataTable。 我似乎没有正确获取表元素。任何建议都表示赞赏。
答案 0 :(得分:0)
我看到有两种可能性:
beforeEach
块中创建间谍。但是,一般情况下,您不应该在单元测试中发出ajax请求。所有这些测试都应该是自包含的,而不是依赖于外部服务。