Я понятия не имею, как проверить это с Qunit? - PullRequest
3 голосов
/ 04 февраля 2012

Я хочу проверить эту функцию: /js/lib/front.js

var Front = function(){
  this.onSignUp = function(){
    if (!Form.assertInput("email")) {
        $("input[name=email]").focus();

        this.showHiddenMessage("Email not set.");

        return false;
    }
 }

}

Я имею в: /js/lib/form.js

function Form() {
     this.assertInput = function (name, defaultValue) {
    var text = $("input[name=" + name + "]").val();

    if (defaultValue != null) {
        if (defaultValue && text == defaultValue) 
            return false;
    }


    if(this.trim(text)) return true;

    return false;
}
}

Это простое прохождение теста:

test("Front", function() {
    var front = new Front()
    ok(front);

 });

Но если я напишу что-то вроде этого:

test("On Sign Up ", function() {
    var front = new Front()

    equal(front.onSignUp(),false,"passing test");

 });

У меня ошибка: Умер в тесте № 1: Form.assertInput не является функцией

Я не понимаю, что мне нужно для проверки такой функции и как включить функцию в другую функцию?

1 Ответ

2 голосов
/ 04 февраля 2012

Я сохранил рабочую скрипку здесь .В качестве примечания вы можете обратиться к руководству по использованию qUnit, здесь . Одна вещь, на которую вы должны обратить внимание, это когда вы объявляете свои функции.Он говорит, что Form.assertInput не является функцией, потому что вы не можете получить к ней доступ таким образом.Вам нужно использовать ключевое слово this, которое относится к текущему контексту.Код должен выглядеть примерно так:

var Form = function () {
    //good to have assertInput first if you're using it in a later function
    this.assertInput = function (name, defaultValue) {
        var text = $("input[name=" + name + "]").val();

        if (defaultValue != null) {
            //safer to explicitly close your if statements with {}
            if (defaultValue && text == defaultValue) {
               return false;
            }
        }

        if ($.trim(text)) { return true; }

        return false;
    };

    this.showHiddenMessage = function (message) {
        alert(message);
    };

    this.onSignUp = function() {
        //this will point to the current context, in this case it will be Form class
        if (!this.assertInput("email")) {
            $("input[name=email]").focus();

            this.showHiddenMessage("Email not set.");

            return false;
        }
    };
};

Также в приведенном вами примере кода отсутствует класс Front.Поэтому я создал в своей скрипке фиктивный файл:

var Front = function() {};

Вот тесты, которые были проведены:

$(document).ready(function() {
    test("Front", function() {
        var front = new Front();
        ok(front);

    });
    test("On Sign Up ", function() {
       var form = new Form();
       equal(form.onSignUp(), false, "passing test");
    });
});
...