Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/469.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何测试Javascript是否提交表单?_Javascript_Jquery_Jasmine - Fatal编程技术网

如何测试Javascript是否提交表单?

如何测试Javascript是否提交表单?,javascript,jquery,jasmine,Javascript,Jquery,Jasmine,我正试图用Jasmine测试我的一些javascript 说到Jasmine,我是一个新手,我对Javascript的知识充其量只是基础知识。我想做的是确保提交表格。我不知道测试的语法应该是什么样子。我想我需要使用spyOn,但我不太确定如何使用。如果有人能给我指出正确的方向,我会很高兴的 function submitform(array) { var token = array[0].replace("access_token=", ""); if ((token !== "

我正试图用Jasmine测试我的一些javascript

说到Jasmine,我是一个新手,我对Javascript的知识充其量只是基础知识。我想做的是确保提交表格。我不知道测试的语法应该是什么样子。我想我需要使用spyOn,但我不太确定如何使用。如果有人能给我指出正确的方向,我会很高兴的

function submitform(array) {
    var token = array[0].replace("access_token=", "");
    if ((token !== "")) {
        $('input[name=Token]').val(token);
        var frm = document.getElementById("tokenform");
        frm.submit();
    }
}

要测试调用了
frm.submit()
,必须对其进行模拟。有两种方法可以实现它。第一种方法通过监视
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();
})