Rails url helper在Rspec中不起作用



我是编程新手,这是我的第一个应用程序。在Rails中创建应用程序时,我有两个模型。User&列表,嵌套。

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

我试着玩周围的url不工作。我尝试更新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 helper。支持/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

没有看到堆栈跟踪,我认为你的问题是在这一行的视图:

<%= pluralize(current_user.lists.count, 'List') %>

看起来current_user是nil。通常,您应该在RSpec套件中定义某种helper方法来模拟用户登录。这样,current_user将返回您在测试中删除的用户。

下面是一个例子:

# spec/support/session_helper.rb
module SessionHelper
  def login(username = 'admin')
    request.session[:user_id] = User.find_by_username(username).id
  end
end
您的

将根据您验证用户的方式而有所不同。例如,设计发布了它自己的测试助手集,因此您可以简单地直接包含它的助手:

# spec/support/devise.rb
RSpec.configure do |config|
  config.include Devise::TestHelpers, :type => :controller
end

似乎它得到一个错误,因为用户不存在。尝试将user.save更改为user.save!,然后您将捕获创建时的错误,我认为…

相关内容

  • 没有找到相关文章

最新更新