162 votes

Le programme d’installation RSpec pour tester un bijou (pas les Rails)

Il est assez facile avec le générateur supplémentaire de rspec-rails d’installation RSpec pour tester une application Rails. Mais que diriez-vous ajoutant RSpec pour tester un bijou en développement ? Je n’utilise pas un bijoutier ou tels outils. Je viens d’utiliser Bundler ( ) pour configurer la structure de la nouvelle gemme et modifier le *.gemspec manuellement. J’ai aussi ajouté à gemspcec et a fait une `` .

Y at-il un tutoriel sympa quoi faire ensuite pour obtenir RSpec travail ?

265voto

iain Points 11602

J'ai mis à jour cette réponse pour correspondre aux meilleures pratiques actuelles:

Bundler prend en charge gem développement parfaitement. Si vous êtes à la création d'un bijou, la seule chose que vous devez avoir dans votre Gemfile est la suivante:

source "https://rubygems.org"
gemspec

Cela dit Bundler pour regarder à l'intérieur de votre fichier gemspec pour les dépendances lorsque vous exécutez bundle install.

Ensuite, assurez-vous que RSpec est un développement de la dépendance de votre bijou. Modifier la gemspec afin qu'il lit:

spec.add_development_dependency "rspec"

Ensuite, créez spec/spec_helper.rb ajouter quelque chose comme:

require 'bundler/setup'
Bundler.setup

require 'your_gem_name' # and any other gems you need

RSpec.configure do |config|
  # some (optional) config here
end

Les deux premières lignes indiquent Bundler pour charger uniquement les pierres précieuses à l'intérieur de votre gemspec. Lorsque vous installez votre propre bijou sur votre propre machine, ce sera la force de vos spécifications techniques pour l'utilisation de votre code actuel, pas la version que vous avez installé séparément.

Créer une spec, par exemple spec/foobar_spec.rb:

require 'spec_helper'
describe Foobar do
  pending "write it"
end

Facultatif: ajouter un .rspec le fichier pour les options par défaut et de le mettre dans votre joyau du chemin de la racine:

--color
--format documentation

Enfin: exécuter les specs:

$ rspec spec/foobar_spec.rb

53voto

Mirko Froehlich Points 10074

La solution d'Iain ci-dessus fonctionne très bien!

Si vous voulez aussi un fichier Rakefile, c'est tout ce dont vous avez besoin:

 require 'rspec/core/rake_task'

RSpec::Core::RakeTask.new('spec')

# If you want to make this the default task
task :default => :spec
 

Vérifiez le RDoc pour RakeTask pour les différentes options que vous pouvez éventuellement passer à la définition de tâche.

28voto

StevenTabTab Points 253

Vous pouvez générer votre nouveau joyau avec rspec en exécutant bundler gem --test=rspec MyGem . Pas d'installation supplémentaire!

J'oublie toujours ça. Il est implémenté ici: https://github.com/bundler/bundler/blob/33d2f67d56fe8bf00b0189c26125d27527ef1516/lib/bundler/cli/gem.rb#L36

7voto

wulftone Points 739

Voici un moyen simple et peu onéreux:

Faire un dir, dans le joyau de la racine appelé spec, mettez vos spécifications. Vous avez probablement déjà rspec installé, mais si vous ne le faites pas, il suffit de faire une gem install rspec et oublier Gemfiles et bundler.

Ensuite, vous allez faire une spec, et vous avez besoin de lui dire où votre application est l'endroit où vos fichiers sont, et inclure le fichier que vous souhaitez tester (avec toutes les dépendances, il a):

# spec/awesome_gem/awesome.rb
APP_ROOT = File.expand_path(File.join(File.dirname(__FILE__), '..', '..'))
$: << File.join(APP_ROOT, 'lib/awesome_gem') # so rspec knows where your file could be
require 'some_file_in_the_above_dir' # this loads the class you want to test

describe AwesomeGem::Awesome do
  before do
    @dog = AwesomeGem::Awesome.new(name: 'woofer!')
  end
  it 'should have a name' do
    @dog.name.should eq 'woofer!'
  end
  context '#lick_things' do
    it 'should return the dog\'s name in a string' do
      @dog.lick_things.should include 'woofer!:'
    end
  end
end

Ouvrez Terminal et exécutez rspec:

~/awesome_gem $ rspec
..

Finished in 0.56 seconds
2 examples, 0 failures

Si vous voulez un peu d' .rspec options amour, allez faire un .rspec le fichier et le mettre dans votre joyau de la racine du chemin d'accès. Le mien ressemble à ça:

# .rspec
--format documentation --color --debug --fail-fast

Facile, rapide, soigné!

J'aime cela parce que vous n'avez pas à ajouter toutes les dépendances de votre projet, et l'ensemble reste très rapide. bundle exec ralentit un peu, ce qui est ce que vous avez à faire assurez-vous que vous utilisez la même version de rspec tout le temps. Que de 0,56 secondes qu'il a fallu pour exécuter deux tests était de 99% pris par le temps, il a pris mon ordinateur pour charger rspec. L'exécution des centaines de spécifications doit être extrêmement rapide. Le seul problème que vous pourriez rencontrer que je suis au courant c'est que si vous changer de version de rspec et la nouvelle version n'est pas compatible avec la fonction que vous avez utilisé dans votre test, vous pourriez avoir à ré-écrire certaines des tests.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X