我是新手,需要測試。 我使用rspec-rails,factory_girl_rails和capybara來測試Rails 5應用程序。 對於身份驗證我有設計。Rspec功能測試。頁面內容在普通用戶和管理員中沒有區別
我的用戶模型有其他字段管理員。默認管理員是false
。但第一個註冊用戶成爲管理員(user.admin = true
)。
現在,當我在我的測試做user = create(:user)
它創建了一個「普通」用戶(user.admin = false
)
但如果我puts page.body
我可以看到哪些不應該渲染對於一個普通用戶的內容。
這裏是我的模板:
%menu
%ul
- if user_signed_in?
%li
Hey, #{current_user.name}
%li= link_to "Edit Profile", edit_user_registration_path
- if current_user.admin
%li= link_to "Today's Orders", todays_orders_path
%li= link_to "Registered Users", users_path
%li= link_to "Add Dish", new_dish_path
%li= link_to "Sign Out", destroy_user_session_path
功能測試的片段:
require 'rails_helper'
require_relative '../support/authentication'
feature 'page content' do
let(:user) { create(:user) }
scenario 'show page content' do
authentication = Authentication.new user
authentication.sign_in
puts page.body
end
end
這就是所說的回報:
<menu>
<ul>
<li>
Hey, Test User
</li>
<li><a href="https://stackoverflow.com/users/edit">Edit Profile</a></li>
<li><a href="/todays_orders">Today's Orders</a></li>
<li><a href="/users">Registered Users</a></li>
<li><a href="/dishes/new">Add Dish</a></li>
<li><a href="https://stackoverflow.com/users/sign_out">Sign Out</a></li>
</ul>
</menu>
我想current_user.admin
被忽略什麼的。但如何使它正常工作?
UPD
這很有趣。首先,如果我創建一個用戶,比puts user.inspect
它表明:
#<User id: 1, email: "[email protected]", name: "User_1", admin: false, created_at: "2016-09-06 15:15:31", updated_at: "2016-09-06 15:15:31">
,但如果我用(byebug)
輸出顯示user.admin設置爲true:
(byebug) u = User.all <ActiveRecord::Relation [#<User id: 1, email: "[email protected]", name: "User_1", admin: true, created_at: "2016-09-06 15:15:31", updated_at: "2016-09-06 15:15:31">]>
下一頁事情是,如果我創建兩個用戶:
let(:admin) { create(:user) } let(:user) { create(:user) }
,並且比user
登錄我仍然有可用的所有鏈接.. 但如果我創建的用戶是這樣的:
admin = User.create(name: 'admin', email: '[email protected]', password: 123456, password_confirmation: 123456) user = User.create(name: 'user', email: '[email protected]', password: 123456, password_confirmation: 123456)
和符號是user
,一切工作正常。
好吧,我們現在有更多信息。你的模型是什麼樣的?我假設所有的管理邏輯都在那裏,但你提到設計。分配管理員的邏輯很重要。對於您的第一個管理員爲false的情況,您是否確認了提交併重新加載? – Vangel
你可以試試 'let!(:admin)...' – Vangel
讓!(:admin)解決我的問題! 我的模型具有所有默認的Devises字段和兩個自定義:名稱和管理員。 以我用戶模型我已經定義了一個方法: 'DEF set_admin User.first.update_attribute(:管理員,真)如果User.count == 1 end' 其通過'after_create執行 :set_admin' 'let!'做什麼?讓@Vangel –