Skip to content

Interactions between Lolex, Timecop and the Cache in HyperSpec #452

Description

@catmando

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:

moduleHyperSpecmoduleInternalmoduleControllerclass << self# wrap all calls with Timecop.return so the file cache gets the true system timedefcache_read(key)Timecop.return{file_cache.get(key)}enddefcache_write(key,value)Timecop.return{file_cache.set(key,value)}enddefcache_delete(key)Timecop.return{file_cache.delete(key)}rescueStandardErrornilendendendendendclassLolex# store all lolex updates unless hyper_spec is mounteddefself.evaluate_ruby(&block)if@capybara_page&.instance_variable_get('@hyper_spec_mounted')@capybara_page.internal_evaluate_ruby(yield)elsepending_evaluations << blockendendend

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions