2014-09-29 6 views
1

Как проверить поле best_in_place как это с Capybara и Rspec? Я новичок в этом.Интеграция Тестирование с: Лучшее место, Capybara & RSpec

<span 
    class='best_in_place' 
    id='best_in_place_user_233952_name' 
    data-url='/users/233952' 
    data-object='user' 
    data-attribute='name' 
    data-nil='User Name' 
    data-type='textarea' 
    data-original-content=''> 
</span> 

Я хочу заполнить лучшую текстовую область с именем.

+0

[has_css?] (Http://www.rubydoc.info/gems/capybara/1.1.2/Capybara/Node/Matchers#has_css%3F-instance_method) –

ответ

5

Это, как я ее решил:

мне пришлось добавить config.include BestInPlace::TestHelpers к моему spec_helper.rb, чтобы использовать best in place test helpers:

RSpec.configure do |config| 
    config.include BestInPlace::TestHelpers 
end 

И в своем тесте я сделал это:

require 'spec_helper' 

feature 'create a new user' do 
    scenario "create user Alice", :js => true do 
     visit '/some_path' 

     click_on 'New User' 
     expect(page).to have_content 'User Name' # [1] 

     user = User.order(:created_at).last 
     bip_area user, :name, 'Alice' 

     expect(page).to have_content 'Alice' 
    end 
end 

[1] важно, потому что он будет ждать, пока JS не загрузит поле!

+2

Спасибо за пример кода. Для тех, кто читает это, вам может понадобиться добавить 'require 'best_in_place'' &' require' best_in_place/test_helpers' в ваш файл 'spec_helper.rb', если вы этого еще не сделали – Reuben

+0

Для меня это были эти два строки, которые необходимо добавить: 'require 'best_in_place/test_helpers'' и ' include BestInPlace :: TestHelpers' – james

1

Предполагая, что у вас включен JavaScript:

fill_in("best_in_place_user_#{user.id}_name", with: 'some text') 
page.execute_script "$('#best_in_place_user_#{user.id}_name').trigger('keyup')" 
+0

Хорошо, но как мне получить правильный идентификатор здесь ? Потому что 233952 динамически генерируется. – zhurora

+0

Вы интерполируете id в строку. Пример кода обновлен, чтобы показать это. –

+0

'' best_in_place_user _ # {user.id} _name "' возвращает правильный id, thx! Но если я использую его в 'fill_in', тест возвращает мне эту ошибку:' Capybara :: ElementNotFound: Не удается найти поле «best_in_place_user_2_name» '(' user.id = 2' является правильным, я проверил. ': JS => true'). – zhurora

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