2013-12-13 2 views
4

Для следующей формы регистрации я сконфигурировал, что первое поле ввода с id="signUpName" сфокусировано при визуализации формы. Backbone-forms Используется для создания формы.Как проверить, сфокусировано ли поле формы ввода?

Sign-in form

Я хочу проверить с Jasmine v.1.3.0 ли определенная форма ввода поля сосредоточены, когда я загружаю вид:

it("should focus the name field of the sign-up form", function() { 
    var signUpName = userController.loginView.signUpForm.$el.find("#signUpName"); 
    userController.loginView.showSignUpForm(); 
    expect(signUpName).toBeFocused(); 
    // expect(signUpName.is(":focus")).toBe(true); 
}); 

Жасмин предлагающее:

Expected '<input id="signUpName" name="signUpName" type="text">' to be focused. 

Как вы можете видеть из спецификации я использую toBeFocused() с jasmine-jquery. Я использую последнюю версию 1.5.93 расширения. Я также нашел дискуссию о реализации toBeFocused() и заметил, что они тем временем изменили ее на alternative implementation, предложенный Райаном Гринбергом.

В качестве альтернативы я попытался шпионить по объекту фокус - если на самом деле это один?

it("should focus the name field of the sign-up form", function() { 
    var signUpName = userController.loginView.signUpForm.$el.find("#signUpName"); 
    var spyEvent = spyOnEvent(signUpName, 'focus'); 
    userController.loginView.showSignUpForm();; 
    expect('focus').toHaveBeenTriggeredOn(signUpName); 
    expect(spyEvent).toHaveBeenTriggered(); 
}); 

Жасмин подсказывает:

Expected event focus to have been triggered on [object Object] 
+0

http://stackoverflow.com/questions/967096/using-jquery-to-test-if-an-input-has-focus – skos

+0

@ SachynKosare Я уже читал эту тему, как вы могли догадаться из строки без комментариев в моей спецификации. Тем не менее я не знаю, почему тест терпит неудачу. – JJD

ответ

0

Мы столкнулись с подобной проблемой на MindMup, где вопрос был, что фокус не срабатывает на этом конкретном объекте, а на другой селектор JQuery, который соответствовал что объект. Мы написали несколько шаблонов для Jasmine, которые проверяют, действительно ли событие было инициировано на эквивалентном наборе элементов DOM jQuery. См https://github.com/mindmup/mapjs/blob/master/test-lib/jquery-extension-matchers.js

С, что вы можете сделать:

spyOn(jQuery.fn, 'focus').and.callThrough(); 
// your test 
expect(jQuery.fn.focus).toHaveBeenCalledOnJQueryObject(yourObject); 
Смежные вопросы