Escrevendo um aplicativo Sinatra simples para simular um serviço da web, decidi usar rspec e um arquivo yaml simples para armazenar os dados de teste necessários.
O arquivo yaml é carregado como o FIXTURES constante de hash na minha spec_helper.rb :
require 'yaml'
FIXTURES = YAML.load_file('config/fixtures.yml')
Então, para acionar casos de teste específicos, decidi pegar uma cópia de um hash específico em FIXTURES e alterar algo nessa cópia:
foo_hash = FIXTURES['some']['hash']
foo_hash['a_key'] = 'new string'
Mas então, como as rotas sinatra usam o mesmo arquivo yaml para pegar os dados para retornar e como as constantes são tratadas no Ruby ( http://www.ruby-forum.com/topic/67675 ) o conteúdo do hash FIXTURES mudaria também.
Para evitar isso, pode-se usar o método clone :
foo_hash = FIXTURES['some']['hash'].clone
O método clone produz uma cópia totalmente separada do hash, resolvendo assim o problema.
Mistério resolvido.
Sintomas: os testes rspec executados em ordem aleatória produzem resultados diferentes. No entanto, a reutilização de uma semente aleatória específica produzirá os mesmos resultados continuamente.