无法找到未禁用的字段 "player_1_name"

Unable to find field "player_1_name" that is not disabled

我刚刚通过向我提供的演练开始这段代码。我的功能测试应该有效,但它给了我这个错误:

Unable to find field "player_1_name" that is not disabled

我试过使用 [] 更改引号、路径,但仍然出现同样的错误。

#features/entre_names_spec.rp

feature "Enter names" do
  scenario "submitting names" do
    visit('/')
    fill_in "player_1_name", with: 'Dave'
    fill_in "player_2_name", with: 'Mittens'
    click_button 'Submit'
    expect(page).to have_content 'Dave vs. Mittens'
  end
end
#app.rb
require 'sinatra/base'

class Battle < Sinatra::Base
  get '/' do
    'Testing infrastructure working!'
  end

  get '/' do
    erb :index
  end

  post '/names' do
    @player_1_name = params[:player_1_name]
    @player_2_name = params[:player_2_name]
    erb :play
  end

  # start the server if ruby file executed directly
  run! if app_file == [=12=]
end
views/index.erb
<form action= "names" method= "post">
  <input type= "text" name= "player_1_name">
  <input type= "text" name= "player_2_name">
  <input type= "submit" value= "Submit">
</form>
#views/play.erb
<%= @player_1_name %> vs. <% @player_2_name %>
Failures:

  1) Enter names submitting names
     Failure/Error: fill_in "player_1_name", with: "Dave"

     Capybara::ElementNotFound:
       Unable to find field "player_1_name" that is not disabled
     # /Users/student/.rvm/gems/ruby-2.6.3/gems/capybara-3.28.0/lib/capybara/node/finders.rb:296:in `block in synced_resolve'
     # /Users/student/.rvm/gems/ruby-2.6.3/gems/capybara-3.28.0/lib/capybara/node/base.rb:83:in `synchronize'
     # /Users/student/.rvm/gems/ruby-2.6.3/gems/capybara-3.28.0/lib/capybara/node/finders.rb:287:in `synced_resolve'
     # /Users/student/.rvm/gems/ruby-2.6.3/gems/capybara-3.28.0/lib/capybara/node/finders.rb:52:in `find'
     # /Users/student/.rvm/gems/ruby-2.6.3/gems/capybara-3.28.0/lib/capybara/node/actions.rb:91:in `fill_in'
     # /Users/student/.rvm/gems/ruby-2.6.3/gems/capybara-3.28.0/lib/capybara/session.rb:749:in `block (2 levels) in <class:Session>'
     # /Users/student/.rvm/gems/ruby-2.6.3/gems/capybara-3.28.0/lib/capybara/dsl.rb:51:in `block (2 levels) in <module:DSL>'
     # ./spec/features/enter_names_spec.rb:4:in `block (2 levels) in <top (required)>'

Finished in 0.07645 seconds (files took 0.94706 seconds to load)
2 examples, 1 failure

Failed examples:

rspec ./spec/features/enter_names_spec.rb:2 # Enter names submitting names

我的猜测是,如果您访问根路径,您会看到 Testing infrastructure working!。那是因为 get '/' 被定义了两次,在我的 Sinatra (v2.0.5) 版本中,第一个声明获胜。

这是呈现表单的此服务器的简单版本。它应该通过测试:

# app.rb

require 'sinatra'

# get '/' defined once
get '/' do
  erb :index
end

post '/names' do
  @player_1_name = params[:player_1_name]
  @player_2_name = params[:player_2_name]
  erb :play
end

运行 与:

$ ruby app.rb

警告:您还必须向播放视图添加第二个等号,以便 ERB 知道 @player_2_name 是一个 Ruby 表达式。

# views/play.erb

<%= @player_1_name %> vs. <%= @player_2_name %>

我遇到了这个问题。它说 'disabled' 因为 .erb 不在您目录中的正确位置。它应该保存在 'views' 文件夹中。