Я пытался получить решения из вопросов SO, перечисленных внизу, но моя проблема в том, что я использую Capybara и FactoryGirl, и я не могу загрузить любой файл seed.rb, не вызывая множество тестов, которые полностью отделены от начальных данных. от взлома.
Большинство сообщений об ошибках являются вариациями page.should_not have_content user.email
после теста, где я пытаюсь удалить пользователя, который я сделал через фабрику. Это тесты, которые прошли нормально, пока я не загрузил начальные данные.
Как автоматически загрузить db: seed в тестовую базу данных?
Предотвращение тестом Rails удаления начальных данных
Каков наилучший способ заполнить базу данных в Rails?
Как автоматически загрузить данные в тестовую базу данных перед тестированием моего приложения?
То, что у меня есть, это одна группа администраторов, которой назначены права администратора и пользователь-администратор в файле seed.rb, связанном вместе.
Одна возможность - вызвать фабрику в моем seed.rb, чтобы заполнить эти данные, но я еще не выяснил, как.
seeds.rb
User.find_or_create_by_email(email: "admin@admin.admin",
password: "admin", password_confirmation: "admin")
%w{admin supermod}.each {|w| Group.find_or_create_by_name(w)}
%w{admin mod player}.each {|w| Permission.find_or_create_by_name(w)}
g = Group.find_by_name("admin")
g.permission_id = Permission.find_by_name("admin").id
puts "failed to add admin permission to admin group" unless g.save
u = User.find_by_email("neonmd@hotmail.co.uk")
ug = UserGroup.new
ug.group_id = Group.find_by_name("admin").id
ug.user_id = u.id
puts "failed to add admin group to #{u.name}" unless u.save && ug.save
Неудачный тест
Это проходит до того, как я загружаю seed.rb
it "lets you remove user from group" do
user = Factory.create(:user)
admin = admin_login
group = add_group
add_user_to_group user, group
click_link "delete_#{user.email}"
page.should_not have_content user.email
end
def admin_login
admin = Factory.build(:admin)
visit login_path
fill_in "email", :with => admin.email
fill_in "password", :with => admin.password
click_button "Log In"
return admin
end
def add_group
group = Factory.build(:group)
visit new_group_path
fill_in "group_name", :with => group.name
click_button "Submit"
return group
end
def add_user_to_group (user, group)
visit groups_path
click_link "#{group.name}_users"
fill_in "user_email", :with => user.email
click_on "Add User"
end