У меня есть простое приложение Rails 4, и я пытаюсь написать несколько тестов, чтобы проверить, что моя учетная запись пользователя работает правильно. У меня есть проблема, что, когда я бегу testcases своими руками, все работает нормально, но когда я пишу некоторые тесты интеграции и запустить их он пропустит валидации моей модели, поэтому я получаю исключение базы данных, какПроверка и тестирование моделей Rails
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] = '[email protected]'
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?
Мои пользователи # создать действие ниже:
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: '[email protected]', \
firstname: 'TestFirstname', lastname: 'TestLastname',user_group: user_group}
end
попробовать уникальность: {сообщение: "Имя пользователя и адрес электронной почты должен быть уникальным} –
хорошо, это то же самое, Ничего не изменилось. – AndreyS
показать действие пользователя # create –