ruby-on-rails - 简单形式关联的 Rspec 测试

标签 ruby-on-rails rspec capybara simple-form

我正在尝试在表单(使用简单表单构建)上运行请求规范。该表单包括一些使用关联方法生成的选择框,因此包括模型的数据库值。

运行 save_and_open_page 时,它​​看起来不像选择下拉菜单中的值。

我看过模拟和 stub ,但这对我来说是新的,我对基本用法之外的概念仍然有些困惑。

有什么方法可以为选择框生成集合,以便 Capybara 可以拾取它?

我正在使用 Rails 3.1、Simple Form、Capybara 和 FactoryGirl。

我的代码是...

挑战规范

describe "New Challenges" do

  before(:all) do
    %w["Under 13", "13 - 16"].each do |item|
      FactoryGirl.create(:age, :name => item)
     end
  end

  it "should redirect to resources after submission" do

    login_valid_user

    visit new_challenge_path

    @challenge = Factory.build(:challenge)

    fill_in "challenge_name", :with => @challenge.name
    fill_in "challenge_description", :with => @challenge.description
    fill_in "challenge_description", :with => @challenge.description
    select "30 mins", :from => "challenge_timescale"
    save_and_open_page
    select 1, :from => "challenge_age_id"
    select @challenge.category, :from => "challenge_category_id"

    click_button "save_button"

  end
end

Controller
def new
  @challenge = Challenge.new

  respond_to do |format|
    format.html # new.html.haml
    format.json { render json: @challenge }
  end
end

表单项
<%= f.association :age, :prompt => "Please select..." %>

型号

挑战
class Challenge < ActiveRecord::Base
  belongs_to :age
end

年龄
class Age < ActiveRecord::Base
  has_many :challenges
end

最佳答案

我强烈建议为您的测试创建固定装置。

通过这种方式,您可以手动创建和操作测试所需的记录。它不像使用模拟、 stub 和 double 那样高效或优雅,但它加强了对应用程序和测试的理解。

关于ruby-on-rails - 简单形式关联的 Rspec 测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8236912/

相关文章:

ruby-on-rails - RSpec "retest broken tests from last time"标志

ruby - capybara :如何定义自定义选择器?

ruby-on-rails - Rails 中的矩阵存储?

ruby-on-rails - 在 Ubuntu 12.04 中卸载 RVM、Ruby、Ruby gem 和 Rails

javascript - 如何从 Ruby on Rails 应用程序将参数从根 html 元素传递到 ReactJS

ruby-on-rails - capybara 及之前(:all) in rspec

ruby - 使用 Capybara 获取边框样式

ruby-on-rails - 如何使用 rails3-jquery-autocomplete 在 rails 3 中创建自动完成搜索表单?

ruby-on-rails - Capybara::ElementNotFound:用于 jquery ui 对话框内容

ruby - 运行 `git checkout` 时执行 `rspec`