Тестирование интерфейса с Javascript и SVG с использованием Rspec, Capybara и Selenium - лучший подход? - PullRequest
2 голосов
/ 08 ноября 2011

Я занимаюсь разработкой приложения с использованием Ruby on Rails и провожу некоторые тесты с использованием RSpec, Capybara и Selenium.

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

Пока что для тестирования взаимодействия со стандартными функциями пользователя (например, регистрация, вход в систему, просмотр списка диаграмм и т. Д.) Мои тесты состоят из создания пользователя и его уничтожения до и после каждого теста соответственно, например:

require 'spec_helper'
require_relative 'integration_test_helper'

describe "Diagrams" do

  include IntegrationTestHelper
  before :all do
    @test_user = Factory.create(:user)
  end

  after :all do
    @test_user.destroy
  end

  context "authenticated user" do
    before :each do
      visit new_user_session_path
      login(@test_user)
    end

    it "should be taken to the diagrams index page" do
      visit diagrams_path
      #page.should have_content "Your Diagrams"
      page.should have_content diagrams.index.title
    end

    it "should list the user's diagrams" do
      diagram = Factory.create(:diagram, :user => @test_user)
      visit diagrams_path
      page.should have_content(diagram.title)
      diagram.destroy
    end

... и вот тест, который я написал, чтобы обнаружить, что при создании и нажатии на ссылку на новую диаграмму на экране отображается соответствующий контейнер div и начальный тег SVG (с использованием Selenium):

    it "should create a diagram and go to the new diagram when clicked", :js => true do
      visit diagrams_path
      find("#btn_create_new_diagram").click

      within("form#new_diagram") do 
        fill_in "diagram_title", :with => "Test diagram"
      end

      click_button diagrams.new.create
      click_on "Test diagram"
      page.should have_content "Test diagram"
      find("#container")
      find("*[name()='svg']")
    end

  end
end

Для тестирования редактора диаграмм, лучше ли мне сделать что-то вроде создания элементов диаграммы в базе данных и проверить, чтобы они соответствующим образом отображались на экране, или я могу проверить фактическое взаимодействие с пользователем, такое как фактическое размещение и управление элементами диаграммы (я представьте себе, что это будет сложно и, возможно, весьма хрупко, поскольку может зависеть от координат мыши и т. д.)? Кроме того, я хочу создать и уничтожить диаграмму до и после каждого теста соответственно? Я бы предпочел протестировать построение довольно большой диаграммы, но я боюсь, что это может привести к долгим и грязным тестам.

...