【问题标题】:ActionView::Template::Error on Capybara TestActionView::Template::Capybara 测试错误
【发布时间】:2023-03-22 04:35:01
【问题描述】:

我正在使用 RSPEC 和 Capybara 进行测试并得到以下错误。

     Failure/Error: click_button "Upload"
     ActionView::Template::Error:
       undefined method `name' for nil:NilClass
     # ./app/views/mappings/show.html.erb:164:in `block (2 levels) in _app_views_mappings_show_html_erb__2876658303246235457_70231209394300'
     # ./app/views/mappings/show.html.erb:163:in `block in _app_views_mappings_show_html_erb__2876658303246235457_70231209394300'
     # ./app/views/mappings/show.html.erb:95:in `_app_views_mappings_show_html_erb__2876658303246235457_70231209394300'
     # (eval):2:in `click_button'
     # ./spec/requests/upload_maps_spec.rb:29:in `block (2 levels) in <top (required)>'

这是模板文件

<%= bootstrap_form_for( [@mapping,@mapping_version], :html => { :multipart => true, :class => "form-horizontal" } ) do |f| %>
  <% if @mapping_version.new_record? %>
    <%= f.file_field :mapping_file, :class => 'span6' %>
  <% else %>
    <%=  %>
    <%= f.file_field :mapping_file, :class => 'span6', :help_block => "Your current mapping file is #{@mapping_version.mapping_file_file_name}. You can choose another file to replace it or just leave blank to keep your original file." %>
  <% end %>
  <%= f.text_field :version, :class => 'span6', :help_block => "Please use a version number formatted as x.y.z where x, y and z are integers" %>
  <%= f.text_area :notes, :class => 'span6', :rows => 5 %>
  <%= f.actions do %>
    <%= f.submit submit_label %>
  <% end %>
<% end %>

虽然模板文件中没有标签“上传”,但它显示在 HTML 中。 这是给我带来问题的测试。

   it "allows user to upload new map" do

    user = FactoryGirl.create(:user)
    login_as(user, :scope => :user)

    @mapping = FactoryGirl.create(:mapping)

    login_as(user)
    visit new_mapping_url(:host => with_maps_subdomain)

    fill_in "Title", :with => "What The Map"
    fill_in "Description", :with => @mapping.description
    select('Traktor Control S4', :from => 'mapping_midi_controller_id')
    select('Traktor Pro 2', :from => 'mapping_software_id')
    fill_in "YouTube Video URL", :with => @mapping.video_url

    click_button "Next step: upload the mapping file"

    current_path.should eq("/mappings/2/mapping_versions/new")

    attach_file('Mapping file', './spec/support/DJTT_VCI400SE_v1_1_2_TSI.zip')
    fill_in "Version", :with => "0.1.0"
    fill_in "Notes", :with => "Initial release"

    click_button "Upload"

    current_path.should eq ("/mappings/2")

  end

对可能发生的事情有任何见解吗?

【问题讨论】:

    标签: ruby-on-rails ruby rspec capybara


    【解决方案1】:

    我不确定,但乍一看,我会检查在您单击“上传”后呈现的模板,我猜有对 nil 对象的名称方法的调用,所以有些东西控制器未正确移交给模板

    我想建议将这些测试编写为提供更清晰测试界面的功能see

    【讨论】:

    • 出现我在创建工厂时忘记了关联。
    猜你喜欢
    • 1970-01-01
    • 2017-08-28
    • 2015-04-15
    • 2014-02-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多