2010-12-01 28 views
0

J'utilise autotest et j'ai ajouté des hooks pour exécuter mes tests d'intégration. Lorsque je travaille, chaque fois que j'effectue une modification ayant un impact sur l'un des tests d'intégration, tous les tests d'intégration sont réexécutés. C'est le comportement que j'aimerais changer, si possible. (J'utilise rspec avec webrat pour mes tests, pas de concombre)Limite Tests d'intégration exécutés par autotest (Rails)

Avec des tests de non-intégration, le motif est qu'il relance les tests dans le même fichier de spécifications (ou décrivez le bloc?) Si vous changez le test ou ce que c'est de décrire. Donc, disons que nous avons page_controller.rb et page_controller_spec.rb. autotest sait que si vous changez l'un de ces fichiers, il exécute seulement les tests dans la spécification page_controller_spec, puis, s'il réussit, il exécute tous les tests. Je voudrais quelque chose de similaire pour mes tests d'intégration - exécutez simplement les tests dans le fichier avec le test défaillant d'abord, puis exécutez tous les tests s'ils passent.

mon fichier .autotest ressemble à ceci

require "autotest/growl" 
require "autotest/fsevent" 

Autotest.add_hook :initialize do |autotest| 
    autotest.add_mapping(/^spec\/integration\/.*_spec\.rb$/) do 
    autotest.files_matching(/^spec\/integration\/.*_spec\.rb$/) 
    end 
end 

Répondre

1

Votre .autotest est la source du problème :) Il dit essentiellement que pour un fichier dans le répertoire/spec/integration, tous d'entre eux doit être exécuté. Vous ne devez renvoyer que le nom de fichier correspondant, comme ceci:

require "autotest/growl" 
require "autotest/fsevent" 

Autotest.add_hook :initialize do |autotest| 
    autotest.add_mapping(/^spec\/integration\/.*_spec\.rb$/) do |filename| 
    filename 
    end 
end 
+0

Des années plus tard, mais merci quand même. –

-1

Désolé, je n'ai pas le temps de réparer complètement votre problème, mais je suppose que vous pouvez le faire vous-même quand vous lisez le commentaire de autotests # add_mapping méthode. Vous devez jouer un peu avec regex. Faites attention à "+ proc + est passé un nom de fichier correspondant et Regexp.last_match". Voici plein commentaire:

# Adds a file mapping, optionally prepending the mapping to the 
    # front of the list if +prepend+ is true. +regexp+ should match a 
    # file path in the codebase. +proc+ is passed a matched filename and 
    # Regexp.last_match. +proc+ should return an array of tests to run. 
    # 
    # For example, if test_helper.rb is modified, rerun all tests: 
    # 
    # at.add_mapping(/test_helper.rb/) do |f, _| 
    #  at.files_matching(/^test.*rb$/) 
    # end 

    def add_mapping regexp, prepend = false, &proc 
+0

Pas très utile. Le commentaire ici est trompeur, il a juste besoin de renvoyer le nom de fichier correspondant dans ce cas. – szeryf