【发布时间】:2015-12-02 13:29:24
【问题描述】:
我有一个简单的 Rails 4 应用程序,我正在尝试编写一些测试来检查我的用户注册是否正常工作。 我有一个问题,当我用手运行测试用例时,一切正常,但是当我编写一些集成测试并运行它们时,它会跳过我的模型的验证,所以我得到了像
这样的数据库异常Minitest::UnexpectedError: ActiveRecord::RecordNotUnique: PG::UniqueViolation: ERROR: duplicate key value violates unique constraint "index_users_on_username"
test 'unique username violated' do
params = user_params # it is just a hash with User model attributes
User.new(params).save # saving user first time to violate unique after
params[:email] = 'Test@Email2'
assert_no_difference 'User.count' do
post users_path, user: params
end
assert_template 'users/new'
end
我的验证示例如下:
validates :username, :email, \
uniqueness: {uniqueness: true, message: 'Username&email must be unique'}, \
length: {maximum: 50, message: 'Length must be <= 50'}
不仅是这个验证问题,其他的都不能在测试中工作。
如果我在测试中使用类似的东西来验证我的用户对象,那将是错误的,因为它应该是。
User.new(params).valid?
我的 users#create 操作如下:
def create
@user = User.new user_params
if @user.save
flash[:success] = 'Welcome to the Sample App!'
redirect_to @user
else
render 'new'
end
end
我的用户#user_params 方法:
def user_params
user_group = UserGroup.find_by_name 'administrator'
if user_group.nil?
user_group = UserGroup.new name: 'administrator'
user_group.save
end
{username: 'TestUsername', password: 'TestPassword', \
password_confirmation: 'TestPassword', email: 'Test@Email', \
firstname: 'TestFirstname', lastname: 'TestLastname',user_group: user_group}
end
【问题讨论】:
-
尝试唯一性:{message: '用户名和电子邮件必须是唯一的'}
-
嗯,还是一样,没什么变化。
-
显示您的 User#create 操作
-
用 users#create body 更新了问题
标签: ruby-on-rails validation activerecord