gpt4 book ai didi

ruby-on-rails - Rails url 助手在 Rspec 中不起作用

转载 作者:行者123 更新时间:2023-12-02 03:51:07 27 4
gpt4 key购买 nike

我是编程新手,这是我的第一个应用程序。
在 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

至于我已经创建了具有以下链接的 View 。
<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

在规范助手中。

我如何让 helper 工作?还是我错过了一些小细节?
提前致谢。

辅助方法。
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 助手。
支持/实用程序.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

最佳答案

没有看到堆栈跟踪,我认为您的问题出在这一行的 View 中:

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

好像 current_user为零。通常你应该在你的 RSpec 套件中定义某种辅助方法来模拟用户登录。这样, current_user将返回您在测试中 stub 的用户。

下面是一个例子:
# spec/support/session_helper.rb
module SessionHelper
def login(username = 'admin')
request.session[:user_id] = User.find_by_username(username).id
end
end

根据您对用户进行身份验证的方式,您的身份会有所不同。例如,Devise 发布了自己的一组测试助手,因此您可以直接包含它的助手:
# spec/support/devise.rb
RSpec.configure do |config|
config.include Devise::TestHelpers, :type => :controller
end

关于ruby-on-rails - Rails url 助手在 Rspec 中不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14341911/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com