【问题标题】:Test view/DOM content RSpec ruby capybara测试视图/DOM 内容 RSpec ruby​​ capybara
【发布时间】:2014-01-29 19:12:52
【问题描述】:

我想知道如何在视图 RSpec 测试中测试 DOM 内容,以知道内容是否存在我通常使用 match 或 have_content(匹配 HTML ids/classes),但在这里我想知道是否 div是否可见(样式显示:无),我不知道该怎么做。

用 RSpec 检查 DOM 的更好方法是什么?

我还谈到了另一位开发人员,他说最好在功能测试中检查 DOM 和这类东西,因为视图不够好,无法做到这一点,我想对此有另一种看法.

【问题讨论】:

  • 如果您想查看 web_page 的实际内容,您可以在断言之前添加save_and_open_page,这适用于capybara
  • 谢谢,对别的东西有用,但我其实不想看,我想测试一下。
  • 可能duplicate
  • 是的,这有点像我需要的,但我仍然需要另一种意见。谢谢。

标签: ruby-on-rails ruby dom rspec capybara


【解决方案1】:

我用Rspec/Capybara 测试DOM 元素。我有PageObject 类并包括Capybara::DSL 看示例
spec/support/page_object.rb:

class PageObject
  include Capybara::DSL

  def visit_page(page)
    visit(page)
    self
  end

  def have_field?(attributes)
    find_field(attributes).visible?
  end

  def have_link?(link)
    find(:xpath, "//a[@href='#{link}']").visible?
  end

  def save_and_open_page
    super
  end

  def login(model)
    fill_in 'email', with: model.email
    fill_in 'password', with: model.password
    click_on 'Submit'
  end

  def right_path?(path, page)
    visit_page(page) && current_path == path
  end
end

spec/views/event_spec.rb:

require 'spec_helper'

feature 'test authozire page' do
  let(:login_page) { PageObject.new }
  let(:user) { FactoryGirl.create(:user) }

  scenario 'login page have field' do
    page = login_page.visit_page('/home/login')
    expect(page.have_field?('email')).to be_true
    expect(page.have_field?('password')).to be_true
    expect(page.have_link?('/users/auth/facebook')).to be_true
    expect(page.have_link?('/users/auth/vkontakte')).to be_true
  end

  scenario "user can login" do
    login_page.visit_page('/home/login').login(user)
    page = login_page.visit_page('/home/login')
    expect(page.have_link?('/search/events')).to be_true
    expect { page.have_link?('/search/users') }.to raise_error(Capybara::ElementNotFound)
    expect(login_page.visit_page('/user_profile')).to be_true
    expect(login_page.right_path?('/user_profile', '/user_profile')).to be_true
    expect(login_page.visit_page('/user_profile/edit')).to be_true
    expect(login_page.right_path?('/user_profile/edit', '/user_profile/edit')).to be_true
  end
end

【讨论】:

  • 谢谢,我会尽快看看!
猜你喜欢
  • 2021-10-27
  • 1970-01-01
  • 2015-04-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-04-12
相关资源
最近更新 更多