Cuộc sống Nhật Bản
Yuto Blog

【Ruby on Rails】RSpecとFactoryBotとShoulda MatchersとCapybaraを導入メモ

Nội dung chính

RSpec設定

Copy Gemfile
1
2
3
group :test do
  gem 'rspec-rails'
end
Copy
1
rails g rspec:install
Copy .rspec
1
2
--require spec_helper
--format documentation
Copy config/application.rb
1
2
3
4
5
6
7
8
9
config.generators do |g|
  g.test_framework :rspec,
                   fixtures: false,
                   controller_specs: false,
                   view_specs: false,
                   helper_specs: false,
                   decorator_specs: false,
                   routing_specs: false
end

Spring設定

Copy Gemfile
1
2
3
group :test do
  gem 'spring-commands-rspec'
end
Copy
1
spring binstub rspec
FactoryBot設定
Copy Gemfile
1
2
3
group :test do
  gem 'factory_bot_rails'
end
Copy spec/support/factory_bot.rb
1
2
3
RSpec.configure do |config|
  config.include FactoryBot::Syntax::Methods
end
Copy spec/rails_helper.rb
1
2
3
4
5
require "support/factory_bot"

config.before(:all) do
  FactoryBot.reload
end

Shoulda Matcher設定

Copy Gemfile
1
2
3
group :test do
  gem 'shoulda-matchers'
end
Copy spec/support/shoulda_matchers.rb
1
2
3
4
5
6
Shoulda::Matchers.configure do |config|
  config.integrate do |with|
    with.test_framework :rspec
    with.library :rails
  end
end
Copy spec/rails_helper.rb
1
require "support/shoulda_matchers"

FFaker設定

Copy Gemfile
1
2
3
group :test do 
  gem 'ffaker'
end

Fuubar設定

Copy Gemfile
1
2
3
group :test do
  gem 'fuubar'
end
Copy .rspec
1
2
--format Fuubar
--color

system spec設定

Copy Gemfile
1
2
3
4
group :test do
  gem 'capybara'
  gem 'webdrivers'
end
Copy spec/rails_helper.rb
1
2
require 'capybara/rspec'
require 'support/capybara'
Copy spec_support/capybara.rb
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
RSpec.configure do |config|
  # Delete screenshot files before testing
  FileUtils.rm_rf(Dir[Rails.root.join('tmp/screenshots/*')], secure: true)

  # Show screenshot when fail
  ENV['RAILS_SYSTEM_TESTING_SCREENSHOT'] = 'inline'

  # Driver setup
  config.before(:each, type: :system) do
    driven_by :selenium_chrome_headless
  end
end

Capybara.register_driver :selenium_chrome_headless do |app|
  options = Selenium::WebDriver::Chrome::Options.new
  %w[
    headless
    window-size=1600x900
    no-sandbox
    disable-gpu
  ].each { |arg| options.add_argument(arg) }
  Capybara::Selenium::Driver.new(app, browser: :chrome, options: options)
end

system specでユーザーをログインする

Copy Gemfile
1
2
3
group :test 
  gem 'rack_session_access'
end
Copy config/environments/test.rb
1
  config.middleware.use RackSessionAccess::Middleware
Copy spec/rails_helper.rb
1
  require 'rack_session_access/capybara'

ユーザーIDのセッションを設定する:

Copy xxx_spec.rb
1
2
3
4
page.set_rack_session(user_id: user.id)

# deviseを使う場合:
page.set_rack_session('warden.user.user.key' => User.serialize_into_session(user))
Updated at 2023-05-09
Nếu bài viết có ích thì các bạn hãy chia sẻ nhé
Rate this article: 5/5 (26 ratings)
You didn't rate yet
Le Minh Thien Toan

Tác giả:Yuto Yasunaga

Xin chào các bạn. Mình là kỹ sư IT đang làm việc ở Nhật Bản. Mình tạo blog này để chia sẻ về cuộc sống và những kinh nghiệm trong quá trình học tập và làm việc.
Hy vọng bài viết này sẽ có ích cho bạn.