我对单元测试真的很陌生,我试图绕过它。所以我有一个文章表单的情况,用户可以输入title
和description
并点击Create Article
文章应该创建,但只有登录用户可以执行此操作所以我需要测试此
因为我是新手,所以这就是我的想法,
这是我的尝试
require 'rails_helper'
RSpec.feature 'adding article' do
scenario 'allow user to add an article' do
@user = User.create(:email => "saadia1@clickteck.com", :password => 'password', :username => 'saadia1')
session[:user_id] = @user.id
visit new_article_path
# @article = Article.user.to eql(@user = User.find_by(id: 6))
fill_in "Title", with: "My Title"
fill_in "Description", with: "My description"
click_on("Create Article")
expect(page).to have_content("My Title")
expect(page).to have_content("My description")
end
end
当我运行命令rspec spec/features/add_article_spec.rb
我看到了
故障:
1)添加文章允许用户添加文章 失败/错误:会话[:user_id] = @ user.id
NameError: undefined local variable or method `session' for #<RSpec::ExampleGroups::AddingArticle:0x007f89285e32e8> # ./spec/features/add_article_spec.rb:6:in `block (2 levels) in <top (required)>'
以0.0197秒结束(文件加载1.35秒)1 例如,1次失败
失败的例子:
rspec ./spec/features/add_article_spec.rb:4#添加文章允许 用户添加文章
所以我的问题是我如何添加一篇文章作为登录用户?我真的很感激你的帮助。
答案 0 :(得分:0)
你是否正在使用设计进行身份验证如果是,设计提供了一些帮助测试,也包括你的rail_helper.rb中的这一行
config.include Devise::Test::ControllerHelpers, :type => :controller
这将帮助您使用sign_in
辅助设计方法,并且您不需要像当前那样使用会话,请参阅link了解更多信息
答案 1 :(得分:0)
这就是我最终创建一个测试用例的方法,因为这是我的第一个测试用例之一,我不确定如何改进它,所以随时可以查看它
require 'rails_helper'
RSpec.feature 'adding article' do
scenario 'allow user to add an article' do
user = FactoryGirl.create(:user)
visit login_path
fill_in 'Email', with: user.email
fill_in 'Password', with: user.password
click_button 'Log in'
expect(page).to have_content('You have successfully logged in')
visit new_article_path
fill_in "Title", with: "My Title"
fill_in "Description", with: "My description"
click_on("Create Article")
expect(page).to have_content("My Title")
expect(page).to have_content("My description")
end
end
这是我的工厂
# spec/factories/users
FactoryGirl.define do
factory :user do
sequence(:username) { |n| "user#{n}" }
password 'password'
sequence :email do |n|n
"user_#{n}@example.com"
end
end
end
在0.4176秒内完成(文件加载2.54秒)1 例如,0次失败
我仍然想知道是否可以在另一个场景中登录用户,或者所有这些都必须是一个场景的一部分。