Ruby on rails RubyonRails教程(清单9.43)
我正在学习MichaelHartl的RubyonRails教程,我在第9章中列出了9.43,问题是我无法显示delete链接,我的两个测试都失败了Ruby on rails RubyonRails教程(清单9.43),ruby-on-rails,ruby,Ruby On Rails,Ruby,我正在学习MichaelHartl的RubyonRails教程,我在第9章中列出了9.43,问题是我无法显示delete链接,我的两个测试都失败了 >Failures: > > 1) User pages delete links as an admin user > Failure/Error: it { should have_link('delete', href: user_path(User.first)) } > expected #
>Failures:
>
> 1) User pages delete links as an admin user
> Failure/Error: it { should have_link('delete', href: user_path(User.first)) }
> expected #has_link?("delete", {:href=>"/users/211"}) to return true, got false
> # ./spec/requests/user_pages_spec.rb:43:in `block (4 levels) in <top (required)>'
>
> 2) User pages delete links as an admin user should be able to delete another user
> Failure/Error: click_link('delete', match: :first)
> Capybara::ElementNotFound:
> Unable to find link "delete"
> # ./spec/requests/user_pages_spec.rb:46:in `block (5 levels) in <top (required)>'
> # ./spec/requests/user_pages_spec.rb:45:in `block (4 levels) in <top (required)>'
>
>Finished in 12.59 seconds
>73 examples, 2 failures
>
>Failed examples:
>
>rspec ./spec/requests/user_pages_spec.rb:43 # User pages delete links as an admin user
>rspec ./spec/requests/user_pages_spec.rb:44 # User pages delete links as an admin user >should be able to delete another user
这是我的样本数据
namespace :db do
desc "Fill database with sample data"
task populate: :environment do
admin= User.create!(name: "Example User",
email: "example@railstutorial.org",
password: "foobar",
password_confirmation: "foobar",
admin:true)
99.times do |n|
name = Faker::Name.name
email = "example-#{n+1}@railstutorial.org"
password = "password"
User.create!(name: name,
email: email,
password: password,
password_confirmation: password)
end
end
end
但是我确信问题就在这里,sessions_helper.rb
module SessionsHelper
def sign_in(user)
remember_token = User.new_remember_token
cookies.permanent[:remember_token] = remember_token
user.update_attribute(:remember_token, User.encrypt(remember_token))
self.current_user = user
end
def signed_in?
!current_user.nil?
end
def current_user=(user)
@current_user = user
end
def current_user?(user)
user == current_user
end
def current_user
remember_token = User.encrypt(cookies[:remember_token])
@current_user ||= User.find_by(remember_token: remember_token)
end
这是我的用户页面规格
请描述“删除链接”怎么办
确保在检查
delete链接时,您以admin
身份登录。
此外,以下描述块出现在spec/requests/user\u pages\u spec.rb
文件中
describe "delete links" do
it { should_not have_link('delete') }
describe "as an admin user" do
let(:admin) { FactoryGirl.create(:admin) }
before do
sign_in admin ##### Sign in as admin before checking delete link
visit users_path
end
it { should have_link('delete', href: user_path(User.first)) }
it "should be able to delete another user" do
expect do
click_link('delete', match: :first)
end.to change(User, :count).by(-1)
end
it { should_not have_link('delete', href: user_path(admin)) }
end
end
您可以显示您的规格代码吗?您是否使用规格的样本数据?您通常使用工厂,我的意思是,我认为您的示例数据在这里没有关系,除非您在测试数据库中使用它,运行以RAILS\u ENV=test
为前缀的任务发现了问题,我错过了描述链接操作的结尾…感谢您的帮助发现了问题,我错过了描述链接动作的结尾…谢谢你的帮助
module SessionsHelper
def sign_in(user)
remember_token = User.new_remember_token
cookies.permanent[:remember_token] = remember_token
user.update_attribute(:remember_token, User.encrypt(remember_token))
self.current_user = user
end
def signed_in?
!current_user.nil?
end
def current_user=(user)
@current_user = user
end
def current_user?(user)
user == current_user
end
def current_user
remember_token = User.encrypt(cookies[:remember_token])
@current_user ||= User.find_by(remember_token: remember_token)
end
it { should_not have_link('delete') }
describe "as an admin user" do
let(:admin) { FactoryGirl.create(:admin) }
before do
sign_in admin
visit users_path
end
it { should have_link('delete', href: user_path(User.first)) }
it "should be able to delete another user" do
expect do
click_link('delete', match: :first)
end.to change(User, :count).by(-1)
end
it { should_not have_link('delete', href: user_path(admin)) }
end
end
describe "delete links" do
it { should_not have_link('delete') }
describe "as an admin user" do
let(:admin) { FactoryGirl.create(:admin) }
before do
sign_in admin ##### Sign in as admin before checking delete link
visit users_path
end
it { should have_link('delete', href: user_path(User.first)) }
it "should be able to delete another user" do
expect do
click_link('delete', match: :first)
end.to change(User, :count).by(-1)
end
it { should_not have_link('delete', href: user_path(admin)) }
end
end