这里,我的集成测试用的是capybara+rspec
一、有Gemfile里添加gem引用
gem 'rspec-rails', '~> 3.5'
gem 'factory_girl_rails'
gem 'database_cleaner' # 清理测试数据
gem 'capybara'
gem 'capybara-screenshot' # 保存测试错误的页面
gem 'selenium-webdriver', '~>2.53.4' #提供网页支持
gem "chromedriver-helper" #chrome浏览器支持
二、配置
在spec_helper.rb文件里添加如下配置:
config.before(:each) do
DatabaseCleaner.strategy = :transaction
end
config.after(:all, type: :feature) do
DatabaseCleaner.clean
end
三、测试
rails generate rspec:install #产生spec文件夹
在spec的文件夹里新建文件夹:integration,在这个文件夹里存放集成测试的文件代码。
在这个文件里新建一个login_spec.rb,这查写测试登录的代码:
require 'rails_helper'
# 使用chrome浏览器
Capybara.register_driver :chrome do |app|
Capybara::Selenium::Driver.new(app, :browser => :chrome)
end
Capybara.default_driver = :chrome
Capybara.ignore_hidden_elements = false #这样隐藏的element也能进行操作
RSpec.configuration.include(IntegrationHelper)
RSpec.feature 'integration', type: :feature do
before(:all) do
create(:user)
end
after(:all) do
@user.destroy if @user# with create in before(:all), it is not in a transaction
end
describe "登录、修改密码、退出", :type => :feature do
describe 'GET /' do
scenario 'sign_in and sign_out' do
within('#new_user') do
fill_in 'user[email]', :with => '登录名'
fill_in 'user[password]', :with => "错的密码"
end
click_button '提交'
expect(page).to have_content '邮箱或密码错误'
within('#new_user') do
fill_in 'user[email]', :with => '登录名'
fill_in 'user[password]', :with => "正确的密码"
end
click_button '提交'
expect(page).to have_content '登录成功后页面包含的内容'
end
end
end
end
四、运行测试
运行bundle exec rspec spec/integration,这里只是运行这个目录下的测试,也可以用bundle exec rspec运行所有的测试。这时就应该能够自动打开chrome浏览器,并可以看到效果了。
注意事项:启动不了浏览器,可能是因为selenium-webdriver或chrome版本的问题,可以更新一下版本。