J'ai introduit la devise, mais je ne peux pas écrire le premier test ...! Je n'avais pas toutes les informations sur la façon de l'écrire, alors j'ai essayé de le résumer moi-même. Pour les débutants qui ont commencé à créer leurs propres applications.
Ruby '2.6.6' Rails '5.2.4'
Gemfile
group :development, :test do
・
・
gem "rspec-rails"
gem "factory_bot_rails"
end
Vers le Gemfile
Terminal
bundle install
Terminal
bundle install
Fetching gem metadata from https://rubygems.org/.............
Fetching gem metadata from https://rubygems.org/.
・
・
Using duktape 2.3.0.0
Fetching factory_bot 6.1.0
Installing factory_bot 6.1.0
Fetching factory_bot_rails 6.1.0
Installing factory_bot_rails 6.1.0
Using jbuilder 2.10.0
・
・
Using web-console 3.7.0
Bundle complete! 22 Gemfile dependencies, 95 gems now installed.
Use `bundle info [gemname]` to see where a bundled gem is installed.
Télécharger RSpec
Terminal
$ bundle exec rails generate rspec:install
Écrivez ce qui suit en .rspec.
rspec
--require spec_helper
--format documentation #Ajouter ici
La description ci-dessus peut être présente ou non, mais l'affichage lors de l'exécution du test change tellement avec ou sans lui.
Aucun
$ ...............................
Oui $ User $ #create $ is valid $ is invalid without email $ is invalid without password
Source: Comment se connecter pour concevoir dans l'environnement de test rspec [rails]
https://qiita.com/Kohei_Kishimoto0214/items/e29e509b12a6eb484a42
### Je n'ai rien écrit, mais je vais essayer
La commande à tester est
`bundle exec rspec`
Alternativement, il peut être spécifié individuellement
#### **`Terminal`**
```ruby
bundle exec rspec
No examples found.
Finished in 0.00101 seconds (files took 3.71 seconds to load)
0 examples, 0 failures
Je n'ai pas encore décrit ce qu'il faut vérifier, mais il est affiché ...! !! !!
Ajoutez la description suivante à la partie de configuration dans rails_helper.rb
.
spec/rails_helper.rb
RSpec.configure do |config|
config.includeFactoryBot::Syntax::Methods
end
Je pense que ça ressemblera à ça.
spec/rails_helper.rb
RSpec.configure do |config|
# Remove this line if you're not using ActiveRecord or ActiveRecord fixtures
config.fixture_path = "#{::Rails.root}/spec/fixtures"
config.include FactoryBot::Syntax::Methods
config.use_transactional_fixtures = true
config.infer_spec_type_from_file_location!
config.filter_rails_from_backtrace!
end
Ensuite, la phrase suivante est commentée dans / spec / rails_helper.rb
, donc veuillez la décommenter.
Vous pouvez maintenant charger le fichier spec / support /
.
/spec/rails_helper.rb
Dir[Rails.root.join('spec/support/**/*.rb')].each{|f|requiref}
/spec/rails_helper.rb
# This file is copied to spec/ when you run 'rails generate rspec:install'
require 'spec_helper'
ENV['RAILS_ENV'] ||= 'test'
require File.expand_path('../config/environment', __dir__)
# Prevent database truncation if the environment is production
abort("The Rails environment is running in production mode!") if Rails.env.production?
require 'rspec/rails'
# Add additional requires below this line. Rails is not loaded until this point!
# Requires supporting ruby files with custom matchers and macros, etc, in
# spec/support/ and its subdirectories. Files matching `spec/**/*_spec.rb` are
# run as spec files by default. This means that files in spec/support that end
# in _spec.rb will both be required and run as specs, causing the specs to be
# run twice. It is recommended that you do not name files matching this glob to
# end with _spec.rb. You can configure this pattern with the --pattern
# option on the command line or in ~/.rspec, .rspec or `.rspec-local`.
#
# The following line is provided for convenience purposes. It has the downside
# of increasing the boot-up time by auto-requiring all files in the support
# directory. Alternatively, in the individual `*_spec.rb` files, manually
# require only the support files necessary.
#
Dir[Rails.root.join('spec', 'support', '**', '*.rb')].sort.each { |f| require f }Non commenté ici
# Checks for pending migrations and applies them before tests are run.
# If you are not using ActiveRecord, you can remove these lines.
begin
ActiveRecord::Migration.maintain_test_schema!
rescue ActiveRecord::PendingMigrationError => e
puts e.to_s.strip
exit 1
end
RSpec.configure do |config|
# Remove this line if you're not using ActiveRecord or ActiveRecord fixtures
config.fixture_path = "#{::Rails.root}/spec/fixtures"
config.include FactoryBot::Syntax::Methods
# If you're not using ActiveRecord, or you'd prefer not to run each of your
# examples within a transaction, remove the following line or assign false
# instead of true.
config.use_transactional_fixtures = true
# You can uncomment this line to turn off ActiveRecord support entirely.
# config.use_active_record = false
# RSpec Rails can automatically mix in different behaviours to your tests
# based on their file location, for example enabling you to call `get` and
# `post` in specs under `spec/controllers`.
#
# You can disable this behaviour by removing the line below, and instead
# explicitly tag your specs with their type, e.g.:
#
# RSpec.describe UsersController, type: :controller do
# # ...
# end
#
# The different available types are documented in the features, such as in
# https://relishapp.com/rspec/rspec-rails/docs
config.infer_spec_type_from_file_location!
# Filter lines from Rails gems in backtraces.
config.filter_rails_from_backtrace!
# arbitrary gems may also be filtered via:
# config.filter_gems_from_backtrace("gem name")
end
Créez un nouveau dossier et fichier spec \ factories \ user.rb
Cette fois, Faker n'est pas inclus, alors entrez les données manuellement. Il existe également un moyen d'attribuer des numéros de série, mais cette fois, nous utiliserons la méthode la plus simple.
Étant donné que le paramètre initial de l'appareil n'a pas de nom, seuls les trois éléments suivants sont requis.
Si vous avez ajouté la colonne de nom, veuillez également ajouter l'élément de nom à spec \ factories \ user.rb
.
spec\factories\user.rb
FactoryBot.define do
factory :user do
email {"[email protected]"}
password {"111111"}
password_confirmation {"111111"}
end
end
Créez spec / support / controller_macros.rb
et ajoutez le contenu officiel ci-dessous.
Officiel: Comment: tester les contrôleurs avec des rails (et RSpec) https://github.com/heartcombo/devise/wiki/How-To:-Test-controllers-with-Rails-(and-RSpec)
spec/support/controller_macros.rb
module ControllerMacros
def login_admin
before(:each) do
@request.env["devise.mapping"] = Devise.mappings[:admin]
sign_in FactoryBot.create(:admin) # Using factory bot as an example
end
end
def login_user
before(:each) do
@request.env["devise.mapping"] = Devise.mappings[:user]
user = FactoryBot.create(:user)
user.confirm! # or set a confirmed_at inside the factory. Only necessary if you are using the "confirmable" module
sign_in user
end
end
end
Écrivez ce qui suit en dehors de RSpec.configure de rails_helper et chargez le dispositif et les macros.
spec/rails_helper.rb
require'devise'
requireFile.expand_path("spec/support/controller_macros.rb")
Écrivez ce qui suit dans RSpec.configure pour activer le test_helper et les macros de l'appareil dans le contrôleur.
spec/rails_helper.rb
RSpec.configure do |config|
・
・
config.include Devise::Test::ControllerHelpers, type: :controller
config.include Devise::Test::IntegrationHelpers, type: :request
config.extend ControllerMacros, :type => :controller
・
・
Une fois ajouté, il ressemble à ceci.
spec\rails_helper.rb
# This file is copied to spec/ when you run 'rails generate rspec:install'
require 'spec_helper'
ENV['RAILS_ENV'] ||= 'test'
require File.expand_path('../config/environment', __dir__)
abort("The Rails environment is running in production mode!") if Rails.env.production?
require 'rspec/rails'
require 'devise'
require File.expand_path("spec/support/controller_macros.rb")
require_relative 'support/controller_macros'
Dir[Rails.root.join('spec', 'support', '**', '*.rb')].sort.each { |f| require f }
begin
ActiveRecord::Migration.maintain_test_schema!
rescue ActiveRecord::PendingMigrationError => e
puts e.to_s.strip
exit 1
end
RSpec.configure do |config|
# Remove this line if you're not using ActiveRecord or ActiveRecord fixtures
config.fixture_path = "#{::Rails.root}/spec/fixtures"
config.include FactoryBot::Syntax::Methods
config.include Devise::Test::ControllerHelpers, type: :controller
config.include Devise::Test::IntegrationHelpers, type: :request
config.extend ControllerMacros, :type => :controller
config.infer_spec_type_from_file_location!
config.filter_rails_from_backtrace!
end
L'utilisateur créé est stocké dans let et peut être utilisé comme une variable d'instance. Ensuite, laissez cet utilisateur se connecter pour concevoir en utilisant la méthode login_user.
Testez la validation du modèle. Veuillez définir la validation à l'avance.
require 'rails_helper'
RSpec.describe User, type: :model do describe 'Enregistrement de l'utilisateur' do it "nom, email, mot de passe et mot de passe_Si la confirmation existe, vous pouvez vous inscrire" do user = build(:user) expect(user).to be_valid # user.valid?Passer si c'est vrai end
end
Source: [Test avec Rspec ① (Test unitaire: Test de validation)] (https://misukeblog.com/rspec/) Source: [Test avec Rspec② (test d'intégration)] (https://misukeblog.com/rspec2/)
Après avoir écrit
Terminal
bundle exec rspec
Sortir
Devrait être! !! !! !! Ceci est terminé! !!
Terminal
$ bundle exec rspec
User
nom, email, mot de passe et mot de passe_Si la confirmation existe, vous pouvez vous inscrire
Finished in 0.5297 seconds (files took 9.34 seconds to load)
1 example, 0 failures
Terminal
& rails g rspec:model user
conflict spec/models/user_spec.rb
Overwrite C:/Users/deeep/techpitgram/spec/models/user_spec.rb? (enter "h"
for help) [Ynaqdhm]
force spec/models/user_spec.rb for help) [Ynaqdhm]
$ bundle
Migrations are pending. To resolve this issue, run:
bin/rails db:migrate RAILS_ENV=test
No examples found.
Dans un tel cas, comme indiqué
Terminal
$ rails db:migrate RAILS_ENV=test
Faisons le
Si vous obtenez une erreur comme celle-ci, c'est une vieille gemme mélangée dans le fichier gem.
Terminal
$ bundle exec rspec
2020-09-02 22:36:39 WARN Selenium [DEPRECATION] Selenium::WebDriver::Chrom
e#driver_path= is deprecated. Use Selenium::WebDriver::Chrome::Service#dri
ver_path= instead.
An error occurred while loading ./spec/models/user_spec.rb.
Failure/Error: require File.expand_path('../config/environment', __dir__)
Selenium::WebDriver::Error::WebDriverError:
per-2.1.1/bin/chromedriver-helper"
# ./config/application.rb:7:in `<top (required)>'
# ./config/environment.rb:2:in `<top (required)>'
# ./spec/rails_helper.rb:4:in `require'
# ./spec/rails_helper.rb:4:in `<top (required)>'
# ./spec/models/user_spec.rb:1:in `require'
# ./spec/models/user_spec.rb:1:in `<top (required)>'
No examples found.
Finished in 0.00008 seconds (files took 7.23 seconds to load)
0 examples, 0 failures, 1 error occurred outside of examples
Référence: Rspec ne fonctionne pas Chargement rails_helper https://teratail.com/questions/247938?link=qa_related_pc
Réécrivez le Gemfile.
Gemfile
group :test do
# Adds support for Capybara system testing and selenium driver
gem 'capybara', '>= 2.15'
gem 'selenium-webdriver'
# Easy installation and use of chromedriver to run system tests with Chrome
#gem 'chromedriver-helper' #Supprimer cette phrase ou commenter
gem 'webdrivers', '~> 3.0' #Ajoutez cette ligne
gem 'rspec-rails'
gem "factory_bot_rails"
end
・
・
gem 'devise'
Et
Terminal
bundle install
Vous devriez pouvoir le faire!
Je vous serais reconnaissant de bien vouloir signaler toute erreur.
[Procédure d'installation de Rspec et Factory_bot dans l'application Rails] (https://qiita.com/Ushinji/items/522ed01c9c14b680222c)
[Test du système d'authentification RSpec pour débutant] (https://qiita.com/zongxiaojie/items/d488edd42ba3864859c7)
[Comment se connecter pour concevoir dans l'environnement de test rspec [rails]] (https://qiita.com/Kohei_Kishimoto0214/items/e29e509b12a6eb484a42)
[Test du contrôleur avec un appareil] (https://qiita.com/nysalor/items/ef3d658ff76bee165379)
[Remarques sur le test unitaire utilisant RSpec @TECH CAMP # 11-note] (https://note.com/ruquia7/n/n00ff04fc9129)
[[Ruby on Rails] Test unitaire du modèle utilisant rspec-note] (https://note.com/vixer93/n/n6ef6555d7a3e)
[À propos de l'erreur "bin / rails db: migrate RAILS_ENV = test" après la migration dans Rails] (https://teratail.com/questions/178462)
Recommended Posts