我只是通过演练开始了这段代码。我的功能测试应该可以正常工作,但是它给了我这个错误:
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 == $0
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
答案 0 :(得分:1)
我的猜测是,如果您访问根路径,则会看到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 %>