Я пытаюсь поймать Heisenbug.
Я обновляю наш проект от Ember CLI 0.2.0 и Ember 1.10.0 до Ember CLI 0.2.3 и Ember 1.11.1. Это был довольно безболезненный процесс, но у меня есть ровно один тест, который теперь терпит неудачу только в Safari (7.1.5). Он проходит в PhantomJS, Chrome и Firefox.
Раздражающе, тест только терпит неудачу, когда тестовый прогон инициируется Testem (то есть, когда изменение кода запускает тестовый прогон автоматического обновления). Если я инициирую тесты из веб-интерфейса Qunit, он пройдет. Обе эти вещи верны независимо от тестовой группы. Проверяемая функция отлично работает при запуске вручную в браузере.
Это интеграционный тест и проверяет, что при изменении значения во входе входные данные обновляются со значением, возвращаемым с сервера. В тестах "сервер" является экземпляром Pretender. Вот как выглядит сам тест:
test('Editing allocation cell', function() {
visit('/district/periods');
fillIn(SELECTORS.definitionRowInput(1,0), '100');
triggerEvent(SELECTORS.definitionRowInput(1,0), 'focusout');
// The triggerEvent should be tripping the focusOut event on a particular
// Ember.Textfield subclass, which subsequently leads to a POST request to
// the server. On Safari, however, the focusOut event isn't being called here.
// It is called elsewhere in the app, and it works in production.
// Things that also don't work: keyEvent(element, 'keypress', 16) (a tab),
// sending 'blur', sending 'focus-out'.
// 'focus-out' also fails in Firefox, 'blur' and tab fail in all 4 envs
andThen(function() {
equal($(SELECTORS.definitionRowInput(1,0)).val(), '90', 'The updated input takes the return value from the server (even if it is different from input)');
equal($(SELECTORS.gradeTotal(2)).text(), '120', 'Grade total updates with the new sum');
});
});
Обратите внимание на второй блок andThen()
: отправив focusout
в элемент управления, мы должны запросить код в компоненте резервного копирования, чтобы обновить данные до сервера. Другие браузеры делают это - я положил console.log()
в ответчика Pretender, чтобы проверить его, но Safari этого не делает. Я предполагаю, что он не отвечает должным образом на событие focusout
.
Учитывая, что этот тест проходит в ветке, которая отличается только от обновления Ember CLI... что, вероятно, изменилось, чтобы сделать этот разрыв?
ETA: я индивидуально откатил все библиотеки, обновленные в этом обновлении, и тест продолжает терпеть неудачу. Единственное изменение, которое, похоже, работает, - это отбросить Ember. Он разрывается в 1.11.0 так же, как 1.11.1, поэтому изменение находится между 1.10.0 и 1.11.0. (Это только оставляет мне ~ 600 фиксаций для просеивания...)
ETA2: я сузил область действия между 1.11.0-beta.5 и 1.11.0. Я пытаюсь использовать bower link для использовать локальные сборки ember, но сборки ember до сих пор были ненадежными при запуске тестов, и связь этих двух тегов не является одной из причин, которая приводит к эффективному делению пополам.