使用Rspec,Capybara和Selenium使用Javascript和SVG测试前端 - 最好的方法?

时间:2011-11-08 12:04:43

标签: javascript ruby-on-rails selenium svg capybara

我正在使用Ruby on Rails开发一个应用程序,并正在使用RSpec,Capybara和Selenium进行一些测试。

我对测试(单元和集成)相当新,并且想知道测试使用javascript构建的前端的最佳方法是什么。 Javascript用于允许用户在图表中放置和操纵SVG元素(例如位置,尺寸,颜色等)。这些元素使用它们的属性保存到数据库中,这样当用户重新加载图表时,一切都按原样。

到目前为止,为了测试与标准用户功能的交互(例如注册,登录,查看图表列表等),我的测试包括创建用户并分别在每次测试之前和之后销毁用户,例如: / p>

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

为了测试图表编辑器,我会更好地做一些事情,比如在数据库中创建图表元素并检查它们是否在屏幕上正确显示,或者我可以测试实际的用户交互,例如实际放置和操作图表元素(I想象这可能很困难,可能很脆,因为它可能依赖鼠标坐标等)?另外,我是否想分别在每次测试之前和之后创建和销毁图表?我更愿意测试构建一个相当大的图表,但我担心这会导致一些冗长而混乱的测试。

0 个答案:

没有答案