Je suis nouveau sur Ruby.
Aujourd'hui, j'ai fait une tâche de râteau qui sort juste "Hello World".
# rake hoge:hello
"Hello World"
J'aurais aimé avoir écrit un test pour m'assurer que le résultat contenait "Hello" et pourrais le trouver simplement en spécifiant une chaîne. .. ..
hoge_spec.rb
require 'rails_helper'
require 'rake'
RSpec.describe 'Hoge', type: :task do
#Omission
describe 'rake hoge:hello' do
let(:task) { 'hoge:hello' }
context 'Trouvez la sortie standard Hello' do
it 'Bonjour avec sortie standard#1 Chaîne de caractères dans l'argument du matcher de sortie' do
#* Type idéal. Cependant, il échoue car il ne correspond pas exactement. .. ..
expect{ @rake[task].invoke() }.to output('Hello').to_stdout
end
it 'Bonjour avec sortie standard#2 Expression régulière dans l'argument du matcher de sortie' do
#* Cela fonctionne, mais il est difficile d'utiliser la correspondance d'expression régulière. .. ..
expect{ @rake[task].invoke() }.to output(/Hello/).to_stdout
end
it 'Bonjour avec sortie standard#Match partiel avec 3 inclus' do
#* Cela fonctionne, mais le code est long. .. ..
$stdout = StringIO.new
@rake[task].invoke()
output_text = $stdout.string
$stdout = STDOUT
expect(output_text).to include 'Hello'
end
end
end
end
... J'ai pensé que ce serait bien si je pouvais spécifier une chaîne de caractères (# 1), mais une erreur. Le seul moyen d'atteindre l'objectif est d'utiliser une expression régulière (# 2) ou d'affecter la sortie standard à une variable (# 3). .. .. Je me demande s'il existe un bon moyen.
Recommended Posts