Capybara在我的测试中给了我NoElementFound错误 我的考试
Describe "agenda pages" do
subject { page }
login_user
describe "Agenda Creation" do
before { visit users_path }
describe "with invalid information" do
it "should not create an agenda" do
expect { click_button "Post" }.should_not change(Agenda, :count)
end
describe "error message" do
before { click_button "Post" }
it { should have_content('error') }
end
end
describe "with valid information" do
before { fill_in 'agenda_subject', with: "Lorem Ipsum" }
it "should create a an agenda" do
expect { click_button "Post" }.should change(Agenda, :count).by(1)
end
end
end
端
我的怀疑是水豚因为我访问过users_path而找不到元素,它只是看不到页面。注意,行为在生产力方面是预期的并且正在工作)如果我将其更改为root_path,我会得到相同的错误。 我的spec_helper文件启用了url_helpers,表单正确且值正确。 至少我确定,表格是在帖子的最后 我的路线
root / users#index
root / home#index
new_user_session GET /users/sign_in(.:format) devise/sessions#new
user_session POST /users/sign_in(.:format) devise/sessions#create
destroy_user_session DELETE /users/sign_out(.:format) devise/sessions#destroy
user_password POST /users/password(.:format) devise/passwords#create
new_user_password GET /users/password/new(.:format) devise/passwords#new
edit_user_password GET /users/password/edit(.:format) devise/passwords#edit
PUT /users/password(.:format) devise/passwords#update
cancel_user_registration GET /users/cancel(.:format) devise/registrations#cancel
user_registration POST /users(.:format) devise/registrations#create
new_user_registration GET /users/sign_up(.:format) devise/registrations#new
edit_user_registration GET /users/edit(.:format) devise/registrations#edit
PUT /users(.:format) devise/registrations#update
DELETE /users(.:format) devise/registrations#destroy
users GET /users(.:format) users#index
agendas POST /agendas(.:format) agendas#create
agenda DELETE /agendas/:id(.:format) agendas#destroy
路由文件
Engage::Application.routes.draw do
authenticated :user do
root to: 'users#index'
end
root :to => "home#index"
devise_for :users
resources :users, only: [:index]
resources :agendas, only: [:create, :destroy]
end
我正在使用规范和设计。这是渲染的形式:
<%= form_for(@agenda) do |f| %>
<div class="field">
<%= f.text_area :subject, placeholder: "Compose new agenda..." %>
</div>
<%= f.submit "Post", class: "btn btn-large btn-primary" %>
<% end %>
答案 0 :(得分:0)
因此,对于控制器测试,你真的不应该使用水豚。 Capybara是一个用于驱动浏览器的集成测试库。要直接测试控制器,您需要为相关操作设置请求并发布/获取/放置/等,并验证您是否获得了您对操作的期望。通常这将验证创建记录或检查实例变量的内容。
您的控制器不知道路由。单元测试的要点是测试它与这些其他组件隔离。要与Capybara一起测试,请进行集成测试。 (整合=一次不止一件事!)
例如:
expect { post :create, agenda: FactoryGirl.attributes_for(:agenda)}.to change(Agenda, :count).by(1)
agenda = FactoryGirl.create(:agenda)
get :show, id: agenda
assigns(:agenda).should eq agenda