e.keyCode分支未涵盖javascript

时间:2017-08-30 04:52:52

标签: javascript unit-testing

澄清:我没有使用JQuery只有纯JS,我需要帮助进行单元测试,因为要阻止"输入"密钥工作正常。

我被困在单元测试中,我试图想象如何覆盖"未覆盖的分支"在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

2 个答案:

答案 0 :(得分:0)

我不明白你的问题。

但看起来你想要禁用Enter功能?

试一试:

jQuery(function() {
         jQuery("#myForm").bind("keypress", function(a) {
            if (a.keyCode == 13) {
				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>

答案 1 :(得分:0)

&#34;分店未涵盖&#34;告诉你有没有可能的输入你没有写过测试。

在您的测试中,e.charCode是真实的(13 == true)。但是,您的应用代码表明e.charCode可能有误(0''undefined等。)

您尚未测试e.charCode是假的情况,而e.keyCode是真实的。您还没有为e.charCodee.keyCode都是假的编写测试。为这两种情况编写测试,测试将覆盖所有分支。