2011-10-06 121 views
1

我想做一個功能測試,爲窗體做一些非常簡單的驗證。 但是我不知道如何使用qunit而不將vars傳遞給函數。 這裏是我說的沒有通過變量的Qunit測試

function validateForm(){ 
     var name = $('#name').val(); 
     var submit = true; 
     //do some validation 
     //if submit true 
     form.submit(); 
    } 

所有qunit的例子是我的文檔來看一個例子做這樣的事情

ok(validateForm('hello'),'Hello is a valid name'); 

我應該只是修改我的功能還是有辦法與這樣的設置一起工作。

// EDIT

我選擇追求現在正在建立高於當前一個簡單地解析形式輸入,然後將它們發送作爲瓦爾到validateForm()功能的另一功能選項

回答

1

我最終做的是以一種允許我在測試中通過變量的方式修改函數。

之前的代碼會做這樣的事

 function validateForm(){ 
       var value1 = $('#someinput').val(); 
       //Do some validation based on these vars 
       $('#someform').submit(); 
     } 

現在,當按鈕被按下它去分析給ARGS出來我還添加了一個「測試」 ARG所以形式不是另一個函數提交在測試過程中提交。

 function parseFormArgs(){ 
      var value1 = $('#someinput').val(); 
      var value2 = $('#otherinput').val(); 
      var test = false; 

      validateForm(value1,value2,test); 
    } 

    function validateForm(value1,value2,test){ 
       var submit = true; 
       //Do some validation 
       if(test != true && submit){ 
        $('#someform').submit(); 
       } 

       return submit; 
    } 

然後我qunit看起來像這樣

 var testFn = true; 
     test('validateForm()', function(){ 
      equals(validateForm('ExampleVal1','ExampleVal2',testFn), false, 'Such and Such Values should not validate'); 
      ... 
      ... 
     }); 
+0

是的,分開您對獲取值和驗證的關注使其更容易。 – craigb

0

qUnit是否可以訪問表單/ UI?我只使用JsTestDriver進行JavaScript測試,但在那裏您只測試內部對象邏輯

因此,不是試圖讀取表單(我不知道您是否可以這樣做),您可以做的是獲取從表單中的電流值,並通過那些驗證功能,如:

function validate(options){ 

     return options.foo === "bar" 

} 

所以,你可以寫不喜歡的東西

var options = {foo:"bar"} 
var valid = validate(options) 
equal(true, valid) 

一qUnit測試

這樣的事情?然後,一旦您對該功能感到滿意,您可以將其添加到UI中。

+0

現在的測試是從形式上UI分開。我想在一個文件中測試多個場景,我認爲通過用戶界面輸入 – BillPull

+0

會很乏味,您應該可以在不同的測試中使用多個場景,我的更新是否有意義? – TobyEvans