2015-05-24 2 views
3

Я просто играю с базовым рубиновым приложением, которое изменяет атрибут направления html при нажатии кнопки. Его работа отлично работает на стороне JQuery, но в моем тестовом сценарии работает даже тогда, когда .click() - триггеры. Вот мои файлы.запуск теста жасмина даже перед запуском .click()

display.html.erb

<p> 
<%= button_tag 'Convert', id: 'test', remote: 'true' %> 
</p> 

Jquery: conversion.js

$(document).ready(function(){ 
 
    $('#test').on('click', setHtmlStyle); 
 
}); 
 
var setHtmlStyle = function(){ 
 
var $style = $('html'); 
 
$style.attr('dir', $style.attr('dir') === 'rtl' ? 'ltr' : 'rtl'); 
 
};

Spec: conversion_spec.js

describe('#test', function(){ 
 
    beforeEach(function(){ 
 
    loadFixtures('conversion.html'); 
 
    }); 
 
    describe('Clicking test button', function(){ 
 
    it('should have an attribute', function(){ 
 
     $('#test').click(); 
 
     expect($('html').attr('dir')).toBe('rtl'); 
 
    }); 
 
    });

Крепеж: conversion.html

<html> 
<input type='button' name='Convert' id='test'> 
</html> 

Вот сообщение об ошибке, когда я запускаю тесты:

Failure/Error: Expected 'ltr' to be 'rtl'. 

Любая помощь или предложения будут действительно оценены. Благодарю.

+0

вход 'id = 'rtl'' должен быть' id =' test'' правильным? – Hacketo

+0

Yup, отредактировал его для моего вопроса. Благодарю. – Teja

+0

Я не очень хорошо знаю Жасмин. Но попытались ли вы выполнить «ожидание асинхронности»? –

ответ

1

Я изменил свой код, чтобы убедиться, что функция .click() работает.

$(document).ready(function(){ 
    $(document).on('click', '#test', setHtmlStyle); 
}); 

var setHtmlStyle = function(){ 
    var $style = $('html'); 
    $style.attr('dir', $style.attr('dir') === 'rtl' ? 'ltr' : 'rtl'); 
}; 
0

Проблема заключается в том, что attr ('dir') не определен, его значение «undefined», если вы установите явно установленный атрибут тега на «rlt» или «ltr», он будет иметь строковое значение, которое вы установили Это.

$style.attr('dir', $style.attr('dir') === 'rtl' && typeof $style.attr('dir') !== "undefined" ? 'ltr' : 'rtl');

неопределенный

+0

Он все еще не решает мою проблему. Я сменил скрипт и выполнил мой тест, но все же показывает то же сообщение об ошибке. – Teja

0

Я просто попытался ваш код и получил это работает со следующей простой модификацией (в дополнении к реализации быстросхватывающегося обходного пути для жасмина JQuery рельсов самоцвета погрузочных приспособлений):

$ ('# test'). Click();

изменяется на

setHtmlStyle();

Это испытало правильную работу.

Jasmine - это инструмент для единичного тестирования низкоуровневого кода JavaScript с элементами DOM, скрытыми от просмотра во время выполнения. Итак, выполнение click() с jQuery не влияет.

То, что это значит, отличается от Selenium или Capybara, цель Jasmine - помочь разработчику с тестирующими/тестирующими низкоуровневыми логическими блоками JavaScript, такими как вычисления и некоторые легкие манипуляции с DOM.

Быстро оттянуть от этого - вы пишете свои тесты против низкоуровневых методов JavaScript, которые выполняют работу для взаимодействия с пользователем, но не для методов, которые включают в себя щелчок() и т. Д. Это поможет вам получить быстрый цикл обратной связи при тестировании небольших функциональных возможностей. Другими словами, речь идет о «в» фазе снаружи - при тестировании BDD.

Фаза «выход» должна быть решена с помощью тестирования интеграции (полное сквозное сквозное тестирование) с использованием таких инструментов, как Selenium, Capybara и Cucumber.

Надеюсь, вы сочтете это полезным. Если у вас есть больше вопросов, дайте мне знать в комментариях.

Вот хорошая последующая презентация о теме, которая расщепляет разницу между концом в конец интеграции и показы Javascript сосредоточенного тестированием: BDD with JS

Все еще, я очень рекомендую говорить с опытным разработчиком в Out-In BDD и как он разбивает процесс на сквозные интеграционные тесты (Cucumber), javascript-модульные тесты браузера (Jasmine) и низкоуровневые тестовые модули (например, RSpec). Вы можете нажать меня на CodeMentor: https://www.codementor.io/andymaleh

Смежные вопросы