1
votes

Comment puis-je compter le nombre d'exemples dans mes tests RSpec?

Je veux compter le nombre de tests dans un répertoire sans exécuter les tests.

J'ai essayé quelque chose de similaire à ce que j'ai trouvé dans ceci , mais n'a pas pu imprimer autre chose que 0 . p>


Voici ce que j'ai essayé (avec et sans les éléments de configuration commentés):

task 'count_specs' do
  RSpec.configure do |config|
    config.pattern = 'features/**/*_spec.rb'
    # config.inclusion_filter.rules
    # config.filter_run focus: true
    # config.run_all_when_everything_filtered = true
    # config.inclusion_filter.rules
    config.requires = ['spec_helper']

    config.load_spec_files

    puts 'count of examples'
    puts config.files_to_run

  puts RSpec.world.example_count
  end

  puts 'count of examples'
  puts RSpec.world.example_count
end

Comment puis-je créer une tâche qui compte le nombre d'exemples correspond à un modèle spécifique?

Je veux exécuter ceci sur deux répertoires et comparer le résultat.


1 commentaires

Vous pouvez essayer d'utiliser le Option --dry-run Depuis la documentation Utilisez l'option --dry-run pour que RSpec imprime la sortie du formateur de votre suite sans exécuter d'exemples ou de hooks.


3 Réponses :


0
votes

Il existe peut-être une méthode RSpec spécifique pour cela, mais je suggère ce script:

RSpec.describe 'smth' do
  array.each do |i|
    it { should_smth }
  end
end

Il est très naïf mais fiable.

Cette variante de recherche " it " et " scenario ", mais vous pouvez changer de modèle si vous le souhaitez.

Cette variante ne fonctionne que pour les tests sans blocs comme

Dir["**/*_spec.rb"].map { |path| File.read(path) }.join.scan(/(  it)|(  scenario)/).count


3 commentaires

Cela ne fonctionne pas s'il existe des groupes d'exemples partagés ou des exemples définis avec des boucles.


@SajadRastegar, merci, vous avez raison. J'ai ajouté ces limitations à la réponse


J'ai de nombreuses indentations différentes de it . Je pourrais en vérifier beaucoup, mais je veux simplement m'accrocher à tout ce que RSpec fait déjà pour les compter.



4
votes

Dans RSpec 3, il existe une option --dry-run qui imprime la sortie du formateur de votre suite sans exécuter d'exemples ni de hooks.

output = `bundle exec rspec --dry-run | grep 'examples, 0 failures'`
example_count = output.split(' ').first.to_i

Si vous avez besoin du nombre d'exemples dans votre script ruby:

rspec --dry-run


5 commentaires

Merci pour la suggestion, mais je dois obtenir le example_count par programme. Je peux le faire manuellement, mais j'essaie de trouver un moyen de le faire en utilisant l'objet RSpec.


Pas besoin de il "échoue dans l'exemple" faire; échouer; fin . Il a fait +1 exemple


@ carterw485 Que voulez-vous dire par comptage par programmation? Vous voulez dire une variable nommée example_count dans votre code ruby ​​pour enregistrer le nombre d'exemples?


Ouais. Je veux utiliser tout ce que RSpec utilise pour compter les exemples. RSpec.world.example_count devrait fonctionner, mais obtenir RSpec pour le mettre à jour est ce avec quoi j'ai du mal.


@ carterw485 Vérifiez la réponse mise à jour. Est-ce que ça marche?



0
votes
RSpec.configuration.world.example_count
This is undocumented so it could break in future releases.
Note that this is the cumulative number of tests that have run, so the number isn't accurate until the after every test has run.

0 commentaires