@SamanthaB Я рад, что смог помочь, не забудьте проголосовать и / или принять ответ, если он был полезен :-)

кто-нибудь дать мне пример написания контрольного примера для проверки, если функция в событии keyup вызывается в jquery и jasmine. Я новичок в jquery и jasmine, поэтому извините за ошибки. Эта программа отображает количество оставшихся символов, когда пользователь вводит символы в поле ввода. И я застрял с тестовыми примерами, которые я попробовал следующим образом

fixture.html: Это приспособление

 <input id="text" name="text" size="100" maxlength="65"></input>
 <span id="count"></span>

script.js: Это файл скрипта с кодом для вычисления оставшихся символов

$(document).ready(function () {
    var txt = $('#text');
    var remainingChar = $('#count');
    var maxLengthBox = txt.attr('maxLength');
    remainingChar.html(maxLengthBox);

    txt.keyup(function () {
        updateChars(remainingChar, maxLengthBox, txt)
    });
});

function updateChars(remainingChar, maxLengthBox, txt) {
    var remChar = maxLengthBox - $(txt).val().length;
    if (remChar < 0) {
        remChar = 0;
    }
    remainingChar.html(remChar);
    return remChar;
}

Это один из тестов, пожалуйста, помогите мне здесь, потому что он не вызывает функцию после запуска keyup, как я могу ее протестировать
1. если функцияupdateChars(remainingChar,maxLengthBox,txt) вызывается и выполняется
2. как проверить правильностьremainingChar счет возвращается

TestCase начинается здесь:
Код работает нормально, но мне нужна помощь в написании контрольного примера для «проверки, отображается ли правильное количество символов», как при запускеkeyup функционировать внутреннийupdateChars функция не вызывается для меня в тестовом случае

beforeEach(function () {
    loadFixtures('Fixture.html');
    txt = $('#text');
    remainingChar = $('#count');
    maxLengthBox = txt.attr('maxLength');
    remainingChar.html(maxLengthBox);
});

it("checking remaining characters", function () { 
    txt.val('hello');   //entering hello into that text field

    //triggering keyup and expecting this to call the updateChars function
    txt.trigger('keyup');  

    expect(updateChars).toHaveBeenCalled():
});
 bipen24 нояб. 2017 г., 06:35
обновил ваш вопрос, но есть лишние скобки} в вашем первом коде. Вы что-то там упускаете?
 Samantha B24 нояб. 2017 г., 22:54
Я обновил код :). Я не сделал, поскольку я все еще работал над этим.
 Castro Roy24 нояб. 2017 г., 17:40
Гдеfunctionwithinkeyup определены?
 Samantha B24 нояб. 2017 г., 07:36
я не был просто ошибкой опечатывания .... спасибо за обновление вопроса :) ... я дал ему шанс проверить это. Я использую приспособления для файла из приспособлений, я определяю переменные в jquery для ex -> var a1 = ('#title'); Взяв идентификатор заголовка из текстового поля ввода прибора и объявив его в структуре jquery.

Ответы на вопрос(1)

я предполагаю, что вы запускаете тест прямо в браузере, верно? И по вашему коду, я предполагаю, чтоupdateChars функция является глобальной, поэтому она привязана кwindow.

Сказав, что вам нужно этоspy, вjasmine мы используем функциюspyOnВот пример:

beforeEach(function() {
    //here we setup the "spy"
    spyOn(window, 'updateChars');
});

it("checking remaining characters", function() { 
    txt.val('hello');
    txt.trigger('keyup');

    expect(updateChars).toHaveBeenCalled():
});

Это всего лишь иллюстративный пример, который необходимо адаптировать к вашим потребностям.

Некоторые заметки
Я вижу в вашем коде эту строкуloadFixtures('Fixture.html');Я не знаю, что он на самом деле делает, но если это асинхронный вызов, то вам нужно будет использоватьdone обратный звонок вbeforeEach.

Еще один иллюстративный пример с асинхронным вызовом:

beforeEach(function(done) {
    //here we setup the "spy"
    spyOn(window, 'updateChars');

    //supose this is a promise and we can call .then
    loadFixtures('Fixture.html')
    .then(function(){
        txt = $('#text');
        remainingChar = $('#count');
        maxLengthBox = txt.attr('maxLength');
        remainingChar.html(maxLengthBox);

        done(); //finally
    }); 

});

it("checking remaining characters", function(done) { 
    txt.val('hello');
    txt.trigger('keyup');

    expect(updateChars).toHaveBeenCalled():

    done();
});

Надеюсь, это поможет

 Samantha B26 нояб. 2017 г., 18:05
Спасибо за ответ, это было очень полезно :)
 Castro Roy27 нояб. 2017 г., 15:30
@SamanthaB Я рад, что смог помочь, не забудьте проголосовать и / или принять ответ, если он был полезен :-)

Ваш ответ на вопрос