呼び出されたことをテストするfrm.submit()
には、モックする必要があります。それには2つの方法があります。最初の方法は、をスパイすることでコードを変更せずに機能します。これは、一度しか使用しないため、この例では機能します。より頻繁にdocument.getElementById
使用すると難しくなります。document.getElementById
var submit;
beforeEach(){
// when your code calls document.getElementById it return an object
// with just one property where you can spy on that it was called
submit = jasmine.createSpy();
spyOn(document 'getElementById').andReturn({submit:submit})
}
it ("should submit", function(){
submitform([somedata]);
expect(submit).toHaveBeenCalled();
})
より良い方法は、コードを書き直してテストしやすくすることです。したがって、DOM 関数を呼び出してフォームを取得する代わりに、フォームを引数として関数に挿入します。これで、モックを作成する代わりに、モックを関数に渡すことができますdocument.getElementById
。このパターンは依存性注入としても知られています
function submitform(array, frm) {
var token = array[0].replace("access_token=", "");
if ((token !== "")) {
$('input[name=Token]').val(token);
frm.submit();
}
}
it ("should submit", function(){
var submit = jasmine.createSpy();
var form = {submit: submit}
submitform([somedata],form);
expect(submit).toHaveBeenCalled();
})