Interactions between Lolex, Timecop and the Cache in HyperSpec
Ninguém assumiu esta issue ainda.
Avaliação
- Dificuldade
- 4/5
- Tempo estimado
- 3-5 dias
- Facilidade para iniciantes
- 35/100
Direção de pesquisa
Comece localizando os métodos cache_read, cache_write e cache_delete de HyperSpec::Internal::Controller; em seguida, inspecione Lolex.evaluate_ruby e como Filecache e Timecop interagem ali. Considera-se concluído quando as operações de cache usam o horário do sistema e as atualizações de Lolex são mantidas quando HyperSpec não está montado, sem enviar comunicação desnecessária ao cliente.
Escrita pelo modelo de indexação a partir do texto da issue.
Descrição
Hyperspec uses the Filecache gem, which uses Time.now. But if Timecop freezes time in a spec, then Time.now is not returning the system time, and the Filecache does not work. This should be fixable by wrapping calls to the Filecache with the timecop return method (and a block.) But this does not in general work because Hyperspec tries to communicate the "return" to the client, even if the client is not running.
The following series of patches fixes the issue, and can be incorporated into the next point release:
module HyperSpec
module Internal
module Controller
class << self
# wrap all calls with Timecop.return so the file cache gets the true system time
def cache_read(key)
Timecop.return { file_cache.get(key) }
end
def cache_write(key, value)
Timecop.return { file_cache.set(key, value) }
end
def cache_delete(key)
Timecop.return { file_cache.delete(key) }
rescue StandardError
nil
end
end
end
end
end
class Lolex
# store all lolex updates unless hyper_spec is mounted
def self.evaluate_ruby(&block)
if @capybara_page&.instance_variable_get('@hyper_spec_mounted')
@capybara_page.internal_evaluate_ruby(yield)
else
pending_evaluations << block
end
end
end
- Linguagem predominante
- JavaScript
- Estrelas
- 538
- Forks
- 41
- Métricas de merge de PRs
- Nenhum PR com merge em 30d
Guia de contribuição
Primeiros passos
- Leia a issue inteira e depois o guia de contribuição do projeto.
- Comente na issue dizendo que vai assumir — evita que duas pessoas façam o mesmo trabalho.
- Faça um fork do repositório e trabalhe em uma branch.
- Abra um pull request que referencie o número da issue.
Mais de hyperstack-org/hyperstack
-
expose_as_operations method Abertaenhancement needs doc
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 68/100
hyperstack-org/hyperstack#359 ·
-
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 68/100
hyperstack-org/hyperstack#267 ·
-
Dificuldade 5/5 Mais de uma semana Facilidade para iniciantes 25/100
hyperstack-org/hyperstack#457 ·
-
Dificuldade 3/5 1-2 dias Facilidade para iniciantes 35/100
hyperstack-org/hyperstack#456 ·
-
Dificuldade 5/5 Mais de uma semana Facilidade para iniciantes 15/100
hyperstack-org/hyperstack#455 · 2 comentários ·
Todas as issues de hyperstack-org/hyperstack
Issues semelhantes
-
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 75/100
palladius/rails8-app-on-gcp#145 ·
-
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 65/100
dotenvx/dotenv-vscode#139 ·
-
test-change-proposal
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 65/100
web-platform-tests/interop#1455 ·
-
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 75/100
corsairdev/corsair#1764 ·
-
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 75/100