【问题标题】:Rspec fails when testing view edit form测试视图编辑表单时 Rspec 失败
【发布时间】:2016-07-16 22:24:11
【问题描述】:

我正在这里开发我的第一个 Rails 应用程序,其中两个生成的测试没有通过:

Failures:

  1) gardens/edit renders the edit garden form
     Failure/Error: assert_select "inputgarden_name[name=?]", "garden[name]"

     Minitest::Assertion:
       Expected at least 1 element matching "inputgarden_name[name="garden[name]"]", found 0..
       Expected 0 to be >= 1.
     # ./spec/views/gardens/edit.html.haml_spec.rb:20:in `block (3 levels) in <top (required)>'
     # ./spec/views/gardens/edit.html.haml_spec.rb:18:in `block (2 levels) in <top (required)>'

  2) gardens/new renders new garden form
     Failure/Error: assert_select "inputgarden_name[name=?]", "garden[name]"

     Minitest::Assertion:
       Expected at least 1 element matching "inputgarden_name[name="garden[name]"]", found 0..
       Expected 0 to be >= 1.
     # ./spec/views/gardens/new.html.haml_spec.rb:19:in `block (3 levels) in <top (required)>'
     # ./spec/views/gardens/new.html.haml_spec.rb:17:in `block (2 levels) in <top (required)>'

Finished in 1.15 seconds (files took 2.74 seconds to load)
34 examples, 2 failures, 17 pending

Failed examples:

rspec ./spec/views/gardens/edit.html.haml_spec.rb:15 # gardens/edit renders the edit garden form
rspec ./spec/views/gardens/new.html.haml_spec.rb:14 # gardens/new renders new garden form

我不确定这是为什么。当我查看测试时,我有点惊讶路径不包含要编辑的 id(类似于/gardens/#{@garden.id}/edit)。当我尝试相应地编辑测试时,rspec 无法运行,告诉我 @garden 尚未实例化。

spec/views/gardens/edit.html.haml_spec.rb

  1 require 'rails_helper'
  2
  3
  4 RSpec.describe "gardens/edit", type: :view do
  5   before(:each) do
  6     @garden = assign(:garden, Garden.create!(
  7       :name => "MyString",
  8       :square_feet => 1,
  9       :zone => 1,
 10       :garden_type => "MyString",
 11       :user => nil
 12     ))
 13   end
 14
 15   it "renders the edit garden form" do
 16     render
 17
 18      assert_select "form[action=?][method=?]", garden_path(@garden), "post" do
 19 
 20        assert_select "input#garden_name[name=?]", "garden[name]"
 21 
 22        assert_select "input#garden_square_feet[name=?]", "garden[square_feet]"
 23 
 24        assert_select "input#garden_zone[name=?]", "garden[zone]"
 25 
 26        assert_select "input#garden_garden_type[name=?]", "garden[garden_type]"
 27 
 28        assert_select "input#garden_user_id[name=?]", "garden[user_id]"
 29      end
 30   end
 31 end

我必须做什么才能通过这些测试?

EDIT:这里是编辑视图

/app/views/gardens/edit.html.haml

%h1 Editing garden

= render 'form'

= link_to 'Show', @garden
\|
= link_to 'Back', gardens_path

/app/views/gardens/_form.html.haml

= simple_form_for(@garden) do |f|
  = f.error_notification

  .form-inputs
    = f.input :name
    = f.input :square_feet
    = f.input :zone
    = f.input :garden_type
    = f.association :user

  .form-actions
    = f.button :submit

【问题讨论】:

  • 您尝试指定的视图是什么样的?我不确定你在说什么不包含 ID 的路径。
  • 是的,您能提供更多信息吗?令我惊讶的是,对于 2 个不同的测试,它在同一位置(第 17 行和第 27 行)给出了错误。可能是在您之间的特定测试之前出现问题... end 运行?
  • @Axe:老实说,我在这里很迷茫;这是我第一次使用 rspec,我只是想弄清楚如何使这些生成的测试通过。这也是我的第一个 Rails 应用程序,所以我有可能在不知不觉中掉下那条“黄金之路”。此外,我刚刚更新了我的帖子,这些行号略有变化(我相信来自一个额外的换行符)。
  • @DaveNewton:我不确定这些测试应该是什么样子。我期待RSpec.describe "gardens/edit" 更像RSpec.describe "gardens/:id/edit" 或其他东西。我得到的印象是没有必要的。
  • 很抱歉,这是一个显而易见的问题,但您是否检查了您的 HTML 视图以获取您正在测试的正确 ID 和选择器属性?

标签: ruby-on-rails ruby ruby-on-rails-4 testing rspec


【解决方案1】:

您包含的错误消息表明未找到给定匹配器的 html 元素。

对于关联,Simple Form gem 默认生成select 元素而不是input 元素。 https://github.com/plataformatec/simple_form#associations

您需要将最后一个断言更改为: assert_select "select#garden_user_id[name=?]", "garden[user_id]"

我猜这个问题出现在新视图的规范中?

【讨论】:

  • 干得好;特别是甚至没有看到标记:) 是的,它正在寻找输入字段而不是选择字段。谢谢,我刚刚完成了一些事情。
猜你喜欢
  • 2014-05-11
  • 2015-07-08
  • 1970-01-01
  • 2023-03-03
  • 2021-12-26
  • 1970-01-01
  • 2012-02-28
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多