【发布时间】:2015-04-29 04:45:17
【问题描述】:
我正在为一个简单的 CRUD rails 应用程序编写基本测试。我在测试时使用 devise 进行身份验证,使用 Factory Girl 来创建对象,测试后我正在使用 Database Cleaner gem 清除 test.db。
我正在使用 RSpec 测试控制器,但需要管理员用户登录才能进行“真正的”测试。
到目前为止,我一直在关注文档,但我认为它不起作用。
我有一个测试来检查计数是否被改变了一个:
describe "POST create" do
context "with valid attributes" do
it "creates a new room" do
expect{ post :create, room: FactoryGirl.attributes_for(:room) }.to change(Room,:count).by(1)
end
当我运行测试套件时出现错误:
预计 #count 已更改 1,但已更改 0
通过阅读,我似乎需要为我的测试设置身份验证。为此,我创建了相关的工厂:
# Devise User Class
factory :user do
email "basicuser@mvmanor.co.uk"
password "u"
password_confirmation "u"
admin false
customer false
end
# Admin
factory :admin, class: User do
email "basicadmin@mvmanor.co.uk"
password "a"
password_confirmation "a"
admin true
customer false
end
我还创建了相关的设计映射宏:
module UserControllerMacros
def login_admin
before(:each) do
@request.env["devise.mapping"] = Devise.mappings[:admin]
sign_in FactoryGirl.create(:admin) # Using factory girl as an example
end
end
def login_user
before(:each) do
@request.env["devise.mapping"] = Devise.mappings[:user]
sign_in FactoryGirl.create(:user) # Using factory girl as an example
end
end
end
我不确定我是否朝着正确的方向前进。我当然需要对我的控制器测试进行身份验证。
【问题讨论】:
-
我不知道密码长度是否与这个问题有关,我认为设备密码长度最小为8(您可以在config/initializers/devise.rb文件中更改)# Range for密码长度。 config.password_length = 8..72
-
如何使用宏(请出示相关代码)
-
@jyrkim 忘了说我在测试时将密码长度设置为 1。
-
好的,祝你好运 :-) 我不是 RSpec 测试专家 - 如果我是的话,我可以尝试提供建议。
-
这里是 GitHub 上 Ruby on Rails 教程代码的链接,它不完全相同,但应用了 FactoryGirl。 github.com/railstutorial/sample_app_rails_4/blob/master/spec/…希望对你有用
标签: ruby-on-rails ruby unit-testing rspec devise