guess_number_ゲームまとめ

3748 ワード

一、tdd(Test-driven development)に対して一定の理解があって、テストの厳格性も体得して、以下は主要なテスト1.1つのランダムで、繰り返さない4桁(千位は0にすることができます)、4つのステップに分けます:1これが1つの数字であることを保証します
expect(number).not.toBeNaN();

②4人であることを保証する
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.2つの数字に基づいて1つの形を出力します.A?B」の文字列.この2つの数字のうち、同じ位置に同じ数字があるとAの前になるものはいくつありますか?何ですか.それ以外の同じ数字はいくつありますか.Bの前の「?」はいくつかです.たとえば、「1236」と「1243」の2つの数字は、「2 A 1 B」を出力する必要があります.この機能は、すべての使用例をテストする場合、テストの目的に反しすぎます.したがって、境界点といくつかの一般的な状況を選択してテストすることができます.たとえば、次のようにします.
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");
})

二、具体的な実現方法1ランダムで重複しない4桁をどのように生成するか
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回循環させることを決めた.
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();

三、出会ったその他の問題1文字の文字化けし:
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>

②github関連操作:
git reset --hard HEAD~3 // 3 
git push -f    //f force

  ③stringObject.substr(start,length)とstringObject.substring(start,stop)substr()メソッドは、startの下付き文字から指定された数の文字を文字列から抽出することができる.substring()メソッドは、文字列の2つの指定された下付き文字の間の文字を抽出するために使用されます.