【发布时间】:2012-12-29 19:09:14
【问题描述】:
我是编程新手,这是我的第一个应用程序。 在 Rails 中创建应用程序时,我有两个模型。用户&列表,嵌套。
resources :users do
resources :lists
end
这些是我通过此设置获得的以下路线:
user_lists GET /users/:user_id/lists(.:format) lists#index
POST /users/:user_id/lists(.:format) lists#create
new_user_list GET /users/:user_id/lists/new(.:format) lists#new
edit_user_list GET /users/:user_id/lists/:id/edit(.:format)lists#edit
user_list GET /users/:user_id/lists/:id(.:format) lists#show
PUT /users/:user_id/lists/:id(.:format) lists#update
DELETE /users/:user_id/lists/:id(.:format) lists#destroy
关于我已经使用以下链接创建了视图。
<div class="stats">
<a href="<%= user_lists_path(current_user) %>">
<%= pluralize(current_user.lists.count, 'List') %>
</a>
</div>
<div class="list">
<%= link_to 'Create List', new_user_list_path(current_user) %>
</div>
这些按预期工作,但是当我在测试中使用相同的 url 帮助程序时出现错误。
describe "List create page" do
let(:user) { FactoryGirl.create(:user) }
before do
user.save
visit new_user_list_path(user)
end
it { should have_selector('title', text: 'SocialTask | List') }
it { should have_selector('h1', text: 'Create list') }
describe "invalid list creation" do
before { click_button 'Create list' }
it { should have_content('Error in creating list') }
end
end
这会导致测试出错。
Failure/Error: visit new_user_list_path(user)
NoMethodError:
undefined method `lists' for nil:NilClass
我尝试过使用无效的网址。 我尝试更新也不起作用的 rspec/capybara。 我还检查了包含
config.include Rails.application.routes.url_helpers
在规范助手中。
如何让助手工作?还是我遗漏了一些小细节? 提前致谢。
辅助方法。
module SessionsHelper
def sign_in(user)
cookies.permanent[:remember_token] = user.remember_token
self.current_user = user
end
def current_user=(user)
@current_user = user
end
def current_user
@current_user ||= User.find_by_remember_token(cookies[:remember_token])
end
def signed_in?
!current_user.nil?
end
def sign_out
self.current_user = nil
cookies.delete(:remember_token)
end
def current_user?(user)
current_user == user
end
end
用于登录的 rspec 助手。 支持/utilities.rb
include ApplicationHelper
def sign_in(user)
visit signin_path
fill_in "Email", with: user.email
fill_in "Password", with: user.password
click_button "Sign in"
cookies[:remember_token] = user.remember_token
end
【问题讨论】:
-
知道为什么会这样吗?尽管使用 FactoryGirl 创建了用户?
-
是的,一旦创建用户,它就会被登录。
-
您发布的 RSpec 示例中未显示用户登录步骤。你需要像
sign_in(user)这样的东西。 -
我已经在 support/utilities.rb 中有一个助手。编辑我的帖子以显示它。
-
我发现了错误。在测试文件中我只添加了“user.save”并忘记输入“sign_in user”一旦我这样做了,所有的测试都通过了。
标签: ruby-on-rails ruby-on-rails-3 rspec capybara helpers