Nous mettons en cache le mappage id/chemin en utilisant Rails.cache
dans une application Rails 3.2. Sur certaines machines, cela fonctionne bien, mais sur les autres, les valeurs sont erronées. La cause est difficile à suivre, j'ai donc des questions sur Rails.cache
lui-même. Est-il purgé entre les tests? Est-il possible que les valeurs mises en cache en mode développement soient utilisées en mode test? S'il n'est pas purgé, comment pourrais-je le faire avant d'exécuter les spécifications?
Ma mémoire cache est la configuration:
#in: config/environments/development.rb
config.cache_store = :memory_store, {:size => 64.megabytes}
#in: config/environments/production.rb
# config.cache_store = :mem_cache_store
Ajouter:
before(:all) do
Rails.cache.clear
end
pour que le cache soit vidé avant l'exécution de chaque fichier de spécifications.
Ajouter:
before(:each) do
Rails.cache.clear
end
pour faire vider le cache avant chaque spécification.
Vous pouvez mettre cela à l'intérieur spec/spec_helper.rb
dans le RSpec.configure
bloquer pour l'appliquer globalement (recommandé plutôt que de le diffuser par fichier ou cas spécifique).
RSpec par défaut n'efface pas ce cache automatiquement.
Une méthode plus efficace (et plus simple) consiste à définir le cache de l'environnement de test pour utiliser NullStore:
# config/environments/test.rb:
config.cache_store = :null_store
Le NullStore garantit que rien ne sera jamais mis en cache.
Par exemple dans le code ci-dessous, il tombera toujours dans le bloc et retournera l'heure actuelle:
Rails.cache.fetch('time') { Time.now }
Voir également le Rails Caching guide: http://guides.rubyonrails.org/caching_with_Rails.html#activesupport-cache-nullstore