function update () {
errorVisibleFlag(false);
$("input.delete:checkbox").each(function() {
if ($(this).is(":checked")) {
var idToDelete = $(this).attr("id"),
status = $(this).attr("status");
dataService.delete(idToDelete)
.fail(function(){errorVisibleFlag(true)});
}
});
get();
}
This function is part of a knockout view model within a durandal app.
I came up with the following jasmine test that uses spys to verify that the calls were working and also some DOM manipulation to allow jquery to bind the function to something. Ive found it works really well.
it('When update is called, delete is called with the correct parameters', function(){
var inputCheckbox = '<input type="checkbox" class="delete" id="bc87d270-95bc-49bc-9cac-3e903d09590b" status="Pending">',
inputCheckboxId = "#bc87d270-95bc-49bc-9cac-3e903d09590b";
$("body").append(inputCheckbox);
var spyDelete = spyOn(vm.dataService, "delete").andCallFake(getData);
var spyGet = spyOn(vm.dataService, "get").andCallFake(getData);
vm.update();
expect(spyDelete).toHaveBeenCalledWith("bc87d270-95bc-49bc-9cac-3e903d09590b");
expect(spyGet).toHaveBeenCalled();
$(inputCheckboxId).remove();
});
Note: The viewmodel vm is injected into the test using require.js and the function dataService.delete returns a jquery promise