Ravi de vous rencontrer. Tout d'abord, je voudrais me présenter brièvement. Je suis diplômé qui a étudié principalement Ruby au DMM WEB CAMP de mai 2020 à septembre 2020 et change actuellement de poste. L'autre jour, une session d'étude pour les débutants organisée avec la gentillesse du mâle RSpec Junichi Ito @jnchito (RSpec Beginners !!).
J'ai ressenti en écrivant un test en utilisant RSpec dans le portfolio, Si vous êtes un débutant comme moi, j'ai résumé les "points d'achoppement" tels que "je vais trébucher ici: penser:" et "je ne sais pas ici: étreindre:" du point de vue d'un débutant. De plus, au fur et à mesure, je voulais parfois un exemple de code de test concret de la fonction que je voulais écrire, alors je me sert également de revue de moi-même, mais si cet article est un peu utile pour les débutants de RSpec Je suis heureux.
** Cible **
J'essaye d'écrire RSpec, mais je ne suis pas sûr de ce que c'est ~: hugging: Pour les débutants.
Cependant, [Introduction à RSpec qui peut être utilisé, Partie 1 "Comprendre la syntaxe de base et les fonctions utiles de RSpec"] de M. Ito (https://qiita.com/jnchito/items/42193d066bd61c740612 "Introduction à RSpec qui peut être utilisé, Partie 1" Comprendre la syntaxe de base et les fonctionnalités utiles de RSpec "")
Il est souhaitable de comprendre le rôle de décrire, il, attend au moins, comme regarder le contenu de cet article dans une certaine mesure ou avoir fait quelque chose.
** Code de référence ** Comme mentionné ci-dessus, je vais le décrire en référence à mon propre portfolio, donc je publierai le lien GitHub ici, mais la cible du test est le site Veuillez noter que nous nous concentrons sur les fonctions de base. ** [Fonctions de base du site] ** (Nouvelle inscription / connexion / édition des membres individuels / corporatifs, demande d'inscription des membres corporatifs, publication / édition d'articles, DM, notification, etc.) DM, notifications, etc. seront introduits dans la prochaine édition de SystemSpec.
** Préparation à la rédaction des tests ** Afin d'écrire un test avec RSpec, il est nécessaire d'insérer et de définir des gemmes dont gem'rspec-rails '. Préparez-vous d'abord à écrire le test, puis à le lire. Ce dont vous avez besoin est décrit dans "Everyday Rails-Introduction to Rails Testing with RSpec". Ou plutôt, si vous regardez ceci, vous pouvez le comprendre sans regarder cet article. Si vous voulez voir le code comme un exemple concret, veuillez le lire tel quel. (C'est vraiment juste pour référence)
Tout d'abord, je vais vous montrer le modèle d'utilisateur individuel. En fait, il existe des associations comme les modèles préférés, mais nous ne les traiterons pas cette fois, nous les avons donc délibérément supprimées.
①user.rb
class User < ApplicationRecord
# Include default devise modules. Others available are:
# :confirmable, :lockable, :timeoutable, :trackable and :omniauthable
devise :database_authenticatable, :registerable,
:recoverable, :rememberable, :validatable
has_many :rooms, dependent: :destroy
has_many :messages, dependent: :destroy
has_many :notifications, dependent: :destroy
validates :last_name, presence: true, length: { maximum: 10 }
validates :first_name, presence: true, length: { maximum: 10 }
validates :kana_last_name, presence: true, length: { maximum: 10 }
validates :kana_first_name, presence: true, length: { maximum: 10 }
validates :email, presence: true, length: { maximum: 30 }
validates :postal_code, presence: true, length: { minimum: 7, maximum: 7 }
validates :address, presence: true, length: { maximum: 30 }
validates :phone_number, presence: true, length: { maximum: 12 }
validates :introduction, length: { maximum: 200 }
attachment :profile_image
def full_name
last_name + " " + first_name
end
def kana_full_name
kana_last_name + " " + kana_first_name
end
end
** Point d'arrêt: étreindre: "Qu'est-ce que FactoryBot?" ** FactoryBot est également décrit dans "Everyday Rails-Introduction to Rails Testing with RSpec". Vous pouvez l'utiliser en insérant une gemme, vous pouvez donc essayer de rechercher avec FactoryBot. Je ne savais pas au début, mais ça va. C'est juste une chose pratique que vous pouvez simplement décrire les données de test et les affecter à une variable d'instance ou une variable locale telle que @user dans ③. Son utilisation est décrite dans ③. Tout d'abord, lancez $ bin / rails g factory_bot: model user pour créer un fichier. Une fois créé, essayez d'insérer des exemples de données en fonction des colonnes de votre application.
②spec/factories/users.rb
FactoryBot.define do
#Utilisez FactoryBot et préparez les données utilisateur à l'avance
factory :user do
last_name { "tester" }
first_name { "Taro" }
kana_last_name { "tester" }
kana_first_name { "Taro" }
email { "[email protected]" }
postal_code { "1234567" }
address { "123, Chiyoda-ku, Tokyo-12-1" }
phone_number { "12345678910" }
password { "testtaro" }
end
end
Je vais enfin écrire un test. repos assuré. Je trébucherai correctement plus tard. Exécution de $ bin / rails g rspec: model l'utilisateur créera user_spec.rb dans le dossier spec / models. Le code de test du modèle (validation, méthode auto-créée, etc.) sera écrit dans ce fichier.
Voici un exemple complet.
③spec/models/user_spec.rb
require 'rails_helper'
RSpec.describe User, type: :model do
before do
@user = FactoryBot.build(:user)
end
describe "Test de validation" do
it "Nom, prénom, nom kana, prénom kana, mail, code postal, adresse, numéro de téléphone, le mot de passe doit être valide" do
expect(@user).to be_valid
end
it "Doit être invalide sans nom" do
@user.last_name = ""
@user.valid?
expect(@user.errors[:last_name]).to include("Entrez s'il vous plait")
end
it "Doit être invalide à moins que le nom de famille ne comporte 10 caractères ou moins" do
@user.last_name = "a" * 11
@user.valid?
expect(@user.errors[:last_name]).to include("Veuillez saisir moins de 10 caractères")
end
it "S'il n'y a pas de nom, il est dans un état invalide" do
@user.first_name = ""
@user.valid?
expect(@user.errors[:first_name]).to include("Entrez s'il vous plait")
end
it "Le nom doit comporter 10 caractères ou moins et ne doit pas être valide" do
@user.first_name = "a" * 11
@user.valid?
expect(@user.errors[:first_name]).to include("Veuillez saisir moins de 10 caractères")
end
it "Doit être invalide sans le nom de famille Kana" do
@user.kana_last_name = ""
@user.valid?
expect(@user.errors[:kana_last_name]).to include("Entrez s'il vous plait")
end
it "Le nom de famille Kana doit comporter 10 caractères ou moins pour être invalide" do
@user.kana_last_name = "a" * 11
@user.valid?
expect(@user.errors[:kana_last_name]).to include("Veuillez saisir moins de 10 caractères")
end
it "S'il n'y a pas de nom kana, il est dans un état invalide" do
@user.kana_first_name = ""
@user.valid?
expect(@user.errors[:kana_first_name]).to include("Entrez s'il vous plait")
end
it "Le nom kana doit comporter 10 caractères ou moins pour être invalide" do
@user.kana_first_name = "a" * 11
@user.valid?
expect(@user.errors[:kana_first_name]).to include("Veuillez saisir moins de 10 caractères")
end
it "Doit être invalide sans adresse e-mail" do
@user.email = ""
@user.valid?
expect(@user.errors[:email]).to include("Entrez s'il vous plait")
end
it "L'adresse e-mail doit contenir 30 caractères ou moins pour être invalide" do
@user.email = "a" * 31
@user.valid?
expect(@user.errors[:email]).to include("Veuillez saisir 30 caractères ou moins.")
end
it "S'il n'y a pas de code postal, il est invalide" do
@user.postal_code = ""
@user.valid?
expect(@user.errors[:postal_code]).to include("Entrez s'il vous plait")
end
it "Si le code postal comporte moins de 7 caractères, il n'est pas valide" do
@user.postal_code = "a" * 6
@user.valid?
expect(@user.errors[:postal_code]).to include("Veuillez saisir au moins 7 caractères")
end
it "Si le code postal dépasse 7 caractères, il n'est pas valide." do
@user.postal_code = "a" * 8
@user.valid?
expect(@user.errors[:postal_code]).to include("Veuillez saisir moins de 7 caractères")
end
it "S'il n'y a pas d'adresse, c'est invalide" do
@user.address = ""
@user.valid?
expect(@user.errors[:address]).to include("Entrez s'il vous plait")
end
it "L'adresse doit contenir 30 caractères ou moins pour être invalide" do
@user.address = "a" * 31
@user.valid?
expect(@user.errors[:address]).to include("Veuillez saisir moins de 30 caractères")
end
it "S'il n'y a pas de numéro de téléphone, il n'est pas valide" do
@user.phone_number = ""
@user.valid?
expect(@user.errors[:phone_number]).to include("Entrez s'il vous plait")
end
it "Le numéro de téléphone doit comporter 12 caractères ou moins pour être invalide" do
@user.phone_number = "a" * 13
@user.valid?
expect(@user.errors[:phone_number]).to include("Veuillez saisir moins de 12 caractères")
end
it "Le texte d'auto-introduction doit comporter 200 caractères ou moins pour être invalide." do
@user.introduction = "a" * 201
@user.valid?
expect(@user.errors[:introduction]).to include("Veuillez saisir moins de 200 caractères")
end
it "Le mot de passe doit contenir 6 caractères ou plus et n'est pas valide" do
@user.password = "a" * 5
@user.valid?
expect(@user.errors[:password]).to include("Veuillez saisir au moins 6 caractères.")
end
it "L'adresse e-mail en double doit être invalide" do
FactoryBot.create(:user)
@user.valid?
expect(@user.errors[:email]).to include("Existe déjà.")
end
end
describe "Test des méthodes d'instance" do
it "Renvoyer le nom complet de l'utilisateur sous forme de chaîne" do
@user.last_name = "tester"
@user.first_name = "Taro"
expect(@user.full_name).to eq "Tester Taro"
end
it "Renvoyer le nom canonique de l'utilisateur sous forme de chaîne" do
@user.kana_last_name = "tester"
@user.kana_first_name = "Taro"
expect(@user.kana_full_name).to eq "Tester Taro"
end
end
end
"Hmmmm, je vais écrire le code de test dans ce fichier. OK: vulcan: Je ne comprends pas vraiment à partir de la première ligne! ** require'rails_helper '** Qu'est-ce que c'est: hugging:" Ceux qui ont pensé. Cela indique à RSpec qu'une application Rails doit être chargée pour exécuter les tests dans le fichier. Cette description est requise pour presque tous les fichiers de la suite de tests. (Cité de Everyday Rails) Je commence à penser que je n'ai pas besoin d'expliquer quoi que ce soit sur Everyday Rails, mais je ferai de mon mieux.
En bref, en écrivant require'rails_helper ', pour les seniors RSpec ** "Mon application ressemble à ceci! Le modèle a ce type de données, le contrôleur a ce genre de description, et la vue le montre! Comprenez!" ** Je vous le dis. Grâce à cette description, RSpec testera l'application par rapport au code que vous avez écrit.
Alors, quel est ce rails_helper? Ceux qui ont pensé. Les paramètres Rspec peuvent être écrits dans ** rails_helper.rb ** dans le dossier spec. Le paramètre permettant d'utiliser la méthode d'assistance du dispositif dans system_spec, qui sera utilisé dans les spécifications système qui seront décrites la prochaine fois, est également écrit ici.
La partie de ce paramètre, etc. est également décrite dans Rails quotidiens. Je compte vraiment sur Everyday Rails, mais je le recommande car il couvre des informations telles que la description spécifique du code de test et pourquoi cette description est nécessaire.
spec/rails_helper.rb
#concevoir un système de méthode d'aide_Rendre disponible dans les spécifications
config.include Devise::Test::IntegrationHelpers, type: :system
Consultez l'exemple de code ci-dessous. Tout d'abord, le bloc before est utilisé pour rendre le code DRY lorsque plusieurs tests dans le même fichier nécessitent les mêmes données. Dans ce cas, les données de test de spec / factories / users.rb décrites dans (2) ci-dessus sont construites et assignées à @user par la description de FactoryBot.build (: user) sur le côté droit. Ce faisant, @user peut être utilisé ultérieurement dans le bloc informatique, etc. Remplacez les données last_name vides par @ user.last_name = "" sur la première ligne du bloc informatique, par exemple "Si @ user.last_name est nul, il est invalide ~" ou @ user.last_name = "a" * En 11, j'ai écrasé les données "aaaaaaaaaaaa" en last_name et j'ai écrit un test tel que "last_name est validé, il est donc invalide sauf s'il contient 10 caractères ou moins." Au fait, le be_valid devant lui s'appelle Matcher. Concernant les matchers, M. Ito's [Introduction à RSpec qui peut être utilisé, partie 2 "Maîtriser les matchers fréquemment utilisés" ](Https://qiita.com/jnchito/items/2e79a1abe7cd8214caa5 "Introduction à RSpec qui peut être utilisé, Partie 2" Maîtriser les correspondants fréquemment utilisés " Je pense que vous devriez vous référer à ").
** Point de trébuchement: étreindre: "Position de description du robot d'usine" ** De plus, en plaçant un bloc avant directement sous RSpec.describe User, tapez :: model do et décrivez @user créé par FactoryBot dedans, @user dans le bloc before est tous dans le même fichier. Il peut être utilisé dans les tests. Cette fois, c'est toujours une simple association, donc c'est mieux, mais à mesure que le nombre d'associations augmente, de plus en plus de données sont créées avec FactoryBot, et je suis accro à la position à décrire à ce moment-là. Surtout System Spec. C'était un marais. J'en parlerai plus tard.
③spec/models/user_spec.rb
RSpec.describe User, type: :model do
#Le bloc before est utilisé pour rendre le code DRY lorsque les mêmes données sont requises pour plusieurs tests dans le même fichier.
before do
@user = FactoryBot.build(:user) # @dernier pour l'utilisateur_name{ "tester" }、first_name { "Taro" }Contient des données telles que
end
it "Nom, prénom, nom kana, prénom kana, mail, code postal, adresse, numéro de téléphone, le mot de passe doit être valide" do
expect(@user).to be_valid
end
it "Doit être invalide sans nom" do
@user.last_name = "" # @user.last_Si le nom est nul, il est invalide ~
@user.valid?
expect(@user.errors[:last_name]).to include("Entrez s'il vous plait")
end
it "Doit être invalide à moins que le nom de famille ne comporte 10 caractères ou moins" do
@user.last_name = "a" * 11 # last_Puisque le nom est en cours de validation, il n'est pas valide sauf s'il contient 10 caractères ou moins ~
@user.valid?
expect(@user.errors[:last_name]).to include("Veuillez saisir moins de 10 caractères")
end
③spec/models/user_spec.rb
it "L'adresse e-mail en double doit être invalide" do
FactoryBot.create(:user) #Enregistré en premier
@user.valid?
expect(@user.errors[:email]).to include("Existe déjà.")
end
Les autres blocs informatiques ont la même structure et je pense qu'ils peuvent être compris d'une manière ou d'une autre, alors je vais les plier. Veuillez noter que la partie include (veuillez saisir "") de expect peut avoir des déclarations d'erreur différentes selon la personne. Si vous avez traduit l'erreur par i18n en japonais, vérifiez-la avec devise.ja.yml etc., ou vérifiez la déclaration d'erreur du terminal au moment de l'exécution, vérifiez donc chacun et entrez le libellé.
③spec/models/user_spec.rb
describe "Test des méthodes d'instance" do
it "Renvoyer le nom complet de l'utilisateur sous forme de chaîne" do
@user.last_name = "tester"
@user.first_name = "Taro"
expect(@user.full_name).to eq "Tester Taro"
end
it "Renvoyer le nom canonique de l'utilisateur sous forme de chaîne" do
@user.kana_last_name = "tester"
@user.kana_first_name = "Taro"
expect(@user.kana_full_name).to eq "Tester Taro"
end
end
Eh bien, c'est assez facile à comprendre sans aucune explication, donc je ne vais pas l'expliquer. C'est juste que la méthode full_name et la méthode kana_full_name décrites dans le modèle de ① sont correctement des noms complets. Quant aux tests de méthodes, je ne peux rien écrire de compliqué, je vais donc l'étudier. ..
En fait, il existe des associations comme le modèle Relation, mais nous ne les traiterons pas cette fois, nous les avons donc délibérément supprimées. Étant donné que le test pour les utilisateurs d'entreprise est presque le même que pour les utilisateurs individuels, seul le code est décrit, veuillez donc vous référer à ce qui suit.
①company.rb
class Company < ApplicationRecord
# Include default devise modules. Others available are:
# :confirmable, :lockable, :timeoutable, :trackable and :omniauthable
devise :database_authenticatable, :registerable,
:recoverable, :rememberable, :validatable
has_many :rooms, dependent: :destroy
has_many :messages, dependent: :destroy
has_many :articles, dependent: :destroy
has_many :notifications, dependent: :destroy
validates :company_name, presence: true, length: { maximum: 30 }
validates :kana_company_name, presence: true, length: { maximum: 30 }
validates :email, presence: true, length: { maximum: 30 }
validates :postal_code, presence: true, length: { minimum: 7, maximum: 7 }
validates :address, presence: true, length: { maximum: 30 }
validates :phone_number, presence: true, length: { maximum: 12 }
validates :introduction, length: { maximum: 800 }
attachment :profile_image
attachment :background_image
#Si approuvé est vrai, vous pouvez vous connecter. Au moment du nouvel enregistrement, la valeur par défaut est false, vous ne pouvez donc pas vous connecter
def active_for_authentication?
super && self.approved?
end
#Le message après la connexion est retourné ci-dessus. Les détails du libellé sont config/locales/devise.ja.Décrit en yml.
def inactive_message
self.approved? ? super : :needs_admin_approval
end
def followed_by?(user)
passive_relationships.find_by(following_id: user.id).present?
end
end
②spec/factories/companies.rb
FactoryBot.define do
factory :company do
company_name { "Test Co., Ltd." }
kana_company_name { "Test Co., Ltd." }
email { "[email protected]" }
postal_code { "1234567" }
address { "123, Chiyoda-ku, Tokyo-12-1" }
phone_number { "12345678910" }
password { "testcompany" }
approved { true }
is_active { true }
end
end
③spec/models/company_spec.rb
require 'rails_helper'
RSpec.describe Company, type: :model do
describe "Test de validation" do
before do
@company = FactoryBot.build(:company)
end
it "Si vous avez le nom de l'entreprise, le nom kana de l'entreprise, l'adresse e-mail, le code postal, l'adresse, le numéro de téléphone et le mot de passe, ils doivent être valides." do
expect(@company).to be_valid
end
it "Il n'est pas valide sans le nom de l'entreprise" do
@company.company_name = ""
@company.valid?
expect(@company.errors[:company_name]).to include("Entrez s'il vous plait")
end
it "Il n'est pas valide s'il n'y a pas de nom kana de société" do
@company.kana_company_name = ""
@company.valid?
expect(@company.errors[:kana_company_name]).to include("Entrez s'il vous plait")
end
it "Doit être invalide sans adresse e-mail" do
@company.email = ""
@company.valid?
expect(@company.errors[:email]).to include("Entrez s'il vous plait")
end
it "S'il n'y a pas de code postal, il est invalide" do
@company.postal_code = ""
@company.valid?
expect(@company.errors[:postal_code]).to include("Entrez s'il vous plait")
end
it "S'il n'y a pas d'adresse, c'est invalide" do
@company.address = ""
@company.valid?
expect(@company.errors[:address]).to include("Entrez s'il vous plait")
end
it "S'il n'y a pas de numéro de téléphone, il n'est pas valide" do
@company.phone_number = ""
@company.valid?
expect(@company.errors[:phone_number]).to include("Entrez s'il vous plait")
end
it "Le mot de passe doit contenir 6 caractères ou plus et n'est pas valide" do
@company.password = "a" * 5
@company.valid?
expect(@company.errors[:password]).to include("Veuillez saisir au moins 6 caractères")
end
it "L'adresse e-mail en double doit être invalide" do
FactoryBot.create(:company)
@company.valid?
expect(@company.errors[:email]).to include("Existe déjà")
end
end
end
Le genre n'est pas particulièrement difficile, je vais donc omettre l'explication.
①genre.rb
class Genre < ApplicationRecord
has_many :articles, dependent: :destroy
validates :genre_name, presence: true, length: { maximum: 15 }
end
②spec/factories/genres.rb
FactoryBot.define do
factory :genre do
genre_name { "Genre de test" }
is_active { true }
end
end
③spec/models/genre_spec.rb
require 'rails_helper'
RSpec.describe Genre, type: :model do
describe "Test de validation" do
it "S'il n'y a pas de nom de genre, il n'est pas valide" do
@genre = FactoryBot.build(:genre)
@genre.genre_name = ""
@genre.valid?
expect(@genre.errors[:genre_name]).to include("Entrez s'il vous plait")
end
end
end
Je suis enfin là. Les spécifications du modèle dans l'article sont légèrement différentes, je voudrais donc les expliquer brièvement. Voici le modèle d'article.
①article.rb
class Article < ApplicationRecord
belongs_to :company
belongs_to :genre
validates :title, presence: true, length: { maximum: 35 }
validates :body, presence: true
attachment :image
#Rechercher uniquement les articles avec un statut de publication valide et des genres valides
def self.all_active
where(is_active: true).joins(:genre).where(genres: {is_active: true})
end
def favorited_by?(user)
favorites.where(user_id: user.id).exists?
end
end
②spec/factories/articles.rb
FactoryBot.define do
factory :article do
title { "Titre du test" }
body { "Corps de test" }
is_active { true }
company
genre
end
end
J'écrirai un test du modèle d'article. $ bin / rails g rspec: model article crée article_spec.rb dans le dossier spec / models. Voici un exemple du code complété.
③spec/models/article_spec.rb
require 'rails_helper'
RSpec.describe Article, type: :model do
describe "Test d'article" do
before do
@company = FactoryBot.create(:company)
@genre = FactoryBot.create(:genre)
@article = FactoryBot.build(:article)
end
#création d'article
context "Lorsque toutes les données sont incluses" do
it "Tous sont entrés pour qu'il soit sauvegardé" do
@article.company_id = @company.id
@article.genre_id = @genre.id
expect(@article.save).to be true
end
end
context "Lorsque toutes les données ne sont pas incluses" do
it "Non enregistré car tous n'ont pas été saisis" do
@article.company_id = @company.id
@article.genre_id = @genre.id
@article.title = ""
@article.body = ""
expect(@article.save).to be false
end
end
end
describe "Test de validation" do
before do
@article = FactoryBot.build(:article)
end
context "Si le titre n'existe pas" do
it "Être dans un état invalide" do
@article.title = ""
@article.valid?
expect(@article.errors[:title]).to include("Entrez s'il vous plait")
end
end
context "Si le titre dépasse 35 caractères" do
it "Je reçois un message d'erreur" do
@article.title = "a" * 36
@article.valid?
expect(@article.errors[:title]).to include("Veuillez saisir moins de 35 caractères")
end
end
it "S'il n'y a pas de texte, il est invalide" do
@article.body = ""
@article.valid?
expect(@article.errors[:body]).to include("Entrez s'il vous plait")
end
end
end
Eh bien, il n'y a rien de nouveau jusqu'à présent, mais le modèle d'article est tel que décrit dans ① belongs_to :company belongs_to :genre C'est une association comme celle-là, et c'est un peu différent d'avant. Comme indiqué ci-dessous, dans le bloc précédent, la société et le genre sont d'abord créés avec FactoryBot, enregistrés dans la base de données, puis affectés respectivement à @company et @genre. Le flux de publication d'articles Il y a une entreprise → Sélectionnez un genre d'article → Vous pouvez publier un article C'est devenu un flux. Sur cette base, le bloc avant a la description suivante car ** les sociétés et les genres doivent exister ** pour publier des articles.
Le reste est facile.
③spec/models/article_spec.rb
RSpec.describe Article, type: :model do
describe "Test d'article" do
before do
#Il y a une entreprise → Sélectionnez un genre d'article → Vous pouvez publier un article
@company = FactoryBot.create(:company)
@genre = FactoryBot.create(:genre)
@article = FactoryBot.build(:article)
end
#création d'article
context "Lorsque toutes les données sont incluses" do
it "Tous sont entrés pour qu'il soit sauvegardé" do
@article.company_id = @company.id
@article.genre_id = @genre.id
expect(@article.save).to be true
end
end
context "Lorsque toutes les données ne sont pas incluses" do
it "Non enregistré car tous n'ont pas été saisis" do
@article.company_id = @company.id
@article.genre_id = @genre.id
@article.title = ""
@article.body = ""
expect(@article.save).to be false
end
end
end
Ceci termine le test du modèle! Il existe également une spécification de modèle du modèle de message, mais je vais l'omettre car le nombre d'éléments est petit. Si vous êtes intéressé, veuillez consulter GitHub.
Cette fois, nous avons résumé les tests et les spécifications du modèle, qui sont les parties essentielles de l'application. Les spécifications du modèle sont également importantes, mais les plus importantes seront les spécifications du système décrites la prochaine fois. Testez le comportement dans un vrai navigateur, comme un utilisateur modifiant ma page ou envoyant un DM à une entreprise. Il y avait de nombreux points à trébucher. Peut-être que je suis le seul à penser: Je voudrais le résumer de manière facile à comprendre, alors j'espère que vous le reverrez la prochaine fois. Merci d'avoir regardé jusqu'à la fin.
** L'édition des spécifications du système 2020.09.28 a été publiée. Veuillez voir ici. ** **
https://qiita.com/jnchito/items/2a5d3e15761fd413657a https://qiita.com/jnchito/items/42193d066bd61c740612 https://qiita.com/jnchito/items/2e79a1abe7cd8214caa5
Recommended Posts