2017-08-30 62 views
0

澄清:我沒有使用JQuery只有純JS,我需要幫助單元測試,因爲阻止「輸入」鍵工作正常。e.keyCode分支未涉及javascript

我被困在單元測試中,我試圖計算如何在單元測試中覆蓋addEventListener keyCode = 13的「分支未覆蓋」,以防止用戶按下輸入並提交意外形式,但我很單純的新手測試,有人可以幫助我嗎?

下面的代碼:

Newsletter.js

var Newsletter = (function() { 
    function Newsletter(handler) { 
    this.handler = handler; 
    this.blockKeyEnter = this.blockKeyEnter.bind(this); 

    this.handler.addEventListener('keypress', this.blockKeyEnter, false); 
    } 

    Newsletter.prototype.blockKeyEnter = function blockKeyEnter(e) { 
    var key = e.charCode || e.keyCode || 0; 
    if (key === 13) { 
     e.preventDefault(); 
    } 
    }; 
} 

Newsletter.spec.js

describe('Newsletter component specification', function() { 
    var form; 

    beforeEach(function() { 

    form = { 
     addEventListener: function() {}, 
    }; 
    }) 

    it('should intercept enter keypress event and prevent it', function() { 
    var event = { 
     keyCode: 13, 
     charCode: 13, 
     preventDefault: sinon.spy() 
    }; 

    var newLetter = new Newsletter(form); 
    newLetter.blockKeyEnter(event); 

    assert(event.preventDefault.called); 
    }); 
} 

我試圖全面的 「分支沒有覆蓋」,但我缺乏想法進展。

branch_not_covered

+0

似乎你的單元測試不理解邏輯OR。如何以及如何測試這個 – adeneo

+0

老實說,我在單元測試中很新,我不知道該怎麼做,所以我需要單元測試的幫助來了解如何它的工作原理... –

回答

0

我不明白你的問題。

但它看起來像你想禁用輸入功能?

試試:

jQuery(function() { 
 
     jQuery("#myForm").bind("keypress", function(a) { 
 
      if (a.keyCode == 13) { 
 
\t \t \t \t alert("Enter detected!"); 
 
       return false; 
 
      } 
 
     }); 
 
});
<script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js"></script> 
 

 
<form id="myForm"> 
 
<input type="text" /> 
 
<input type="submit" value="Submit"/> 
 
</form>

0

「分公司不包括」告訴你,有你沒有寫一個測試可能的輸入。

在你的測試中,e.charCode是truthy(13 == true)。但是,您的應用代碼表明e.charCode可能有誤(0''undefined等)。

您還沒有測試過e.charCode有錯誤而e.keyCode有問題。你還沒有寫出測試e.charCodee.keyCode都是錯誤的。爲這兩種情況編寫測試,您的測試將覆蓋所有分支。

+0

...所以你知道我怎麼能測試這兩種情況?真的我不知道單元測試......這是我第一次需要定義/測試場景。 –

+0

您可以通過基本上覆制測試中的代碼來測試charCode 13。對於前半部分的測試,從對象中刪除'charCode:13'。下半部分,從對象中移除'keyCode:13'。 然後爲「不應該攔截其他按鍵事件」做一個全新的測試。首先複製當前的測試,然後將keyCode和charCode更改爲其他內容,然後否定所有的斷言。 – skylize

+0

更正:你的第二個單獨測試應該是「如果keyCode和keyDown都丟失了,不應該攔截」。複製你的初始測試,並完全刪除keyCode和charCode(意思是「未定義」),然後否定所有的斷言。 – skylize