【发布时间】:2018-06-21 20:59:48
【问题描述】:
我正在尝试用 jasmine 为 JavaScript 代码编写一个测试,其中包括不起作用的 DOM 元素。当我只测试 JavaScript 代码(只是简单的函数,而不是 DOM 元素)时,它可以工作。我一直在研究这么久,并不能真正找到答案。我还尝试使用 jsdom,因为它应该在测试 DOM 元素时使用,但是我不断收到一堆错误。 是否有任何“简单”的方法可以仅使用 jasmine 来测试 DOM 元素?
JavaScript:
var result;
var adding = function(one, two) {
var one1 = document.forms["myForm"]["one"].value;
var two1 = document.forms["myForm"]["two"].value;
result = parseInt(one1) + parseInt(two);
var number = document.getElementById("number");
number.innerHTML = result;
return result;
}
HTML:
<html>
<head> </head>
<body>
<form name="myForm">
<h4>numner 1</h4> <input type="text" name="one" id="one"></input>
<h4>number 2</h4> <input type="text" name="two" id="two"></input> <input type="submit" onclick="adding(one.value, two.value); return false;"> </form>
<p id="number"> </p>
</body>
</html>
我的测试规格:
describe("additions", function() {
it("result should add two numbers", function() {
var final = adding(5, 1);
expect(final).toEqual(6);
});
})
对于我总是得到的测试:
无法读取未定义的属性“一”。
我知道
var one1 = document.forms["myForm"]["one"].value;
var two1 = document.forms["myForm"]["two"].value;
在这个例子中看起来很奇怪,但我的实际代码要大得多(我不想发布整个代码,因为我的问题没有必要)而且这是必要的,所以我不得不在这里包含它(也许它会影响测试)。
【问题讨论】:
-
在你的测试中模拟表单;
document.forms.myForm = { one: { value: 5 }, two: { value: 1 } }; -
我不明白如何在我的测试中使用 /where 。你能具体说明一下吗?谢谢。
标签: javascript unit-testing testing jasmine jsdom