Hacktoberfest 2026: die Issues, die Maintainer für den Oktober markiert haben – offen und einsteigerfreundlich. Hacktoberfest-Issues durchsuchen

Interactions between Lolex, Timecop and the Cache in HyperSpec

Offen
#452 0 Kommentare 0 Reaktionen 0 zugewiesene Personen Auf GitHub ansehen

Dieses Issue hat noch niemand übernommen.

Bewertung

Schwierigkeit
4/5
Geschätzter Aufwand
3-5 Tage
Anfängerfreundlichkeit
35/100
Issue-Typ
Bug
Klarheit
Größtenteils klar
Aktivitätsstatus
Veraltet
Tech-Stack
ruby
Bereich
testing

Rechercherichtung

Beginne damit, HyperSpec::Internal::Controller's cache_read-, cache_write- und cache_delete-Methoden zu lokalisieren, und untersuche anschließend Lolex.evaluate_ruby sowie, wie Filecache und Timecop dort interagieren. Als erfüllt gilt die Aufgabe, wenn Cache-Operationen die Systemzeit verwenden und Lolex-Aktualisierungen beibehalten werden, wenn HyperSpec nicht gemountet ist, ohne unnötige Client-Kommunikation zu senden.

Vom Indexierungsmodell aus dem Issue-Text verfasst.

Beschreibung

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
Vorherrschende Sprache
JavaScript
Sterne
538
Forks
41
PR-Merge-Kennzahlen
Keine gemergten PRs in 30 T.

Beitragsleitfaden

Beitragsleitfaden öffnen

Erste Schritte

  1. Lesen Sie das ganze Issue und danach den Beitragsleitfaden des Projekts.
  2. Schreiben Sie ins Issue, dass Sie es übernehmen — das erspart doppelte Arbeit.
  3. Forken Sie das Repository und arbeiten Sie in einem Branch.
  4. Öffnen Sie einen Pull Request, der die Issue-Nummer nennt.

Mehr aus hyperstack-org/hyperstack

Alle Issues in hyperstack-org/hyperstack

Ähnliche Issues

Weitere Issues zu JavaScript

Neue Issues direkt in Ihr Postfach

Eine kurze Übersicht über anfängerfreundliche GitHub-Issues.