RSpec 测试使用表单构建器元素的方法

Posted

技术标签:

【中文标题】RSpec 测试使用表单构建器元素的方法【英文标题】:RSpec testing a method that uses a form builder element 【发布时间】:2012-03-28 16:40:31 【问题描述】:

我想知道是否有人知道如何实现 Rspec 测试,该测试可以利用 Rails 中的表单构建器。这是我的助手中的内容:

 def render_radio_buttons(answer, label)
    check_these = []
    field = '<div class="radio">'
      label.split(',').each do |option|
        if check_these.include?(option.strip)
          field += answer.radio_button :body, option.strip, checked = true
        else
          field += answer.radio_button :body, option.strip
        end
        field += label_tag option.strip
      end
    field += '</div>'
  end

此方法从数据库中提取包含多个逗号分隔标签的标签字段。在这种情况下,答案是表单构建器 f。既然它需要表单构建器,我将如何测试这样的东西?

如果您有更好的 rails 方法来实现这一点,我很想知道!感谢任何可以提供帮助的人!

【问题讨论】:

你有没有研究过嘲笑/期望? answer 可能是一个测试替身,它可以采用 radio_button 方法,并且您可以期望使用正确的参数调用它 X 次。然后你可以让它返回任何旧字符串,然后测试你的field String。您本身并不真正关心.radio_button 返回的内容,因为 Rails 正在处理这些问题。你更关心如何使用它。 【参考方案1】:

我会使用 Capybara 测试表单。

https://github.com/jnicklas/capybara

Capybara 通过模拟真实用户如何与您的应用交互来帮助您测试 Rails 和 Rack 应用。它与运行测试的驱动程序无关,并且内置了 Rack::Test 和 Selenium 支持。通过外部 gem 支持 WebKit。

describe "the signup process", :type => :request do
  before :each do
    User.make(:email => 'user@example.com', :password => 'caplin')
  end

  it "signs me in" do
    within("#session") do
      fill_in 'Login', :with => 'user@example.com'
      fill_in 'Password', :with => 'password'
    end
    click_link 'Sign in'
  end
end

【讨论】:

以上是关于RSpec 测试使用表单构建器元素的方法的主要内容,如果未能解决你的问题,请参考以下文章

Angular2:禁用表单构建器的元素

如何使用 jquery 构建动态表单构建器

使用应该匹配器使用 RSPEC 测试我的控制器时发生错误,特别是创建我无法测试保存功能

Flutter 表单构建器包图像选择器 Firestore Flutter

如何在 JQuery 表单构建器中使用 JSON 呈现表单

SystemStackError - 堆栈级别太深;在 Rspec 测试中,使用acts_as_audited、Rspec、数据库清理器