为了澄清:我使用的不仅仅是纯JS,我需要帮助单元测试,因为阻止"enter“键可以正常工作。
我被困在单元测试中,我试图计算如何覆盖addEventListener keyCode = 13的单元测试中的“分支”,以防止用户按enter键并意外提交表单,但是我对单元测试非常新手,有人能帮我吗?
在这里,代码:
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);
});
}我正在努力填补“未涵盖的分支”,但我缺乏取得进展的想法。

发布于 2017-08-30 05:12:13
我不明白你的问题。
但是看起来你想要禁用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>
发布于 2017-08-30 08:47:31
“分支未涵盖”是告诉你,有可能的输入,你还没有写一个测试。
在您的测试中,e.charCode是真实的(13 == true)。但是您的应用程序代码表明,e.charCode有可能成为falsey (0、''、undefined等)。
您还没有测试过e.charCode是falsey而e.keyCode是真实的情况。您还没有为e.charCode和e.keyCode都是falsey时编写测试。为这两种情况编写测试,您的测试将覆盖所有分支。
https://stackoverflow.com/questions/45952159
复制相似问题