1.一个随机的,不重复的四位数(千位可以为0),要分为4个步骤:
①保证这是一个数字
expect(number).not.toBeNaN();
②保证这是一个四位的
expect(number.length).toEqual(4);
③保证数字之间不重复
var not_repeated = should_not_repeated(number); expect(not_repeated).toBeTruthy();
④保证这个数字是随机的
var is_random_number = should_one_random_number(); expect(is_random_number).toBeTruthy();
2.根据两个数字输出一个形如"?A?B"的字符串。这两个数字中有几个在相同的位置上有相同的数字则A前的"?"为几,除此之外,其他的相同的数字有几个则B前的"?"为几.例如:两个数字分别为"1236"和"1243"则应输出"2A1B"
对于这个功能如果测试所有的用例则情况太多,有点违背了测试的目的,所以可以选取边界点和几个普通的情况来测试,例如:
it("should back 4A0B when guess 1234 for 1234 ", function () { var back_string = compare("1234", "1234") expect(back_string).toEqual("4A0B"); });
3.集成测试:也就是说我们要把前面的功能集合在一起.因为前面已经单独做了测试,所以我在这里没有做过多的测试,例如:
it("should back 4A0B when guess right", function () { var guess_number = localStorage.getItem("number"); expect(compare(guess_number, localStorage.number)).toEqual("4A0B"); });
4.人机交互页面:这个功能要实现用户输入一个数字,机器做出检查并给出相关的提示信息.对于这个测试要测试所有可能操作产生的反应,情况较多,例如:
it("should output 2A1B if user guess 1236 while answer is 1243 in the first time", function () { document.getElementById("input_content").value = 1236; localStorage.setItem("number", 1243); document.getElementById("confirm").click(); var information = document.getElementById("guess1").textContent; expect(information).toEqual("第1次尝试:2A1B"); })
二,具体实现方法
①如何生成一个随机的,不重复的四位数
function random_a_number() { var numbers = []; while(numbers.length<4){ var number = parseInt(Math.random() * 10).toString(); if(!_.contains(numbers,number)){ numbers.push(number) } } return numbers[0] + numbers[1] + numbers[2] + numbers[3]; }
②怎么测一个随机数,这里一直让我很纠结,最后确定了让其循环10000次,而每个数字最多出现10次
var numbers = []; for (var i = 0; i < 10000; i++) { numbers.push(random_a_number()) } var grouped_numbers = _.groupBy(numbers, function (number) { return parseInt(number) }) var counted_numbers = _.map(grouped_numbers, function (value, key) { return {"number": key, "count": value.length} }) return !_.find(counted_numbers, function (counted_number) { return counted_number.count > 11 })
③测试页面时不能只调用点击时应该调用的函数,而是要真正的实现人机交互--点击按钮,这样不仅可以测试函数是否正确还可以测试函数与按钮是否绑定,如:
document.getElementById("confirm").click();
三,遇到的其他问题
①文字乱码:
②github相关操作:
git reset --hard HEAD~3 //将最近3次的提交回滚 git push -f //f为force
③stringObject.substr(start,length)与stringObject.substring(start,stop)
substr() 方法可在字符串中抽取从 start 下标开始的指定数目的字符。
substring() 方法用于提取字符串中介于两个指定下标之间的字符。