Skip to content
Snippets Groups Projects
Select Git revision
  • move-gl-dropdown
  • improve-table-pagination-spec
  • move-markdown-preview
  • winh-fix-merge-request-spec
  • master default
  • index-namespaces-lower-name
  • winh-single-karma-test
  • 10-3-stable
  • 36782-replace-team-user-role-with-add_role-user-in-specs
  • winh-modal-internal-state
  • tz-ide-file-icons
  • 38869-milestone-select
  • update-autodevops-template
  • jivl-activate-repo-cookie-preferences
  • qa-add-deploy-key
  • docs-move-article-ldap
  • 40780-choose-file
  • 22643-manual-job-page
  • refactor-cluster-show-page-conservative
  • dm-sidekiq-versioning
  • v10.4.0.pre
  • v10.3.0
  • v10.3.0-rc5
  • v10.3.0-rc4
  • v10.3.0-rc3
  • v10.3.0-rc2
  • v10.2.5
  • v10.3.0-rc1
  • v10.0.7
  • v10.1.5
  • v10.2.4
  • v10.2.3
  • v10.2.2
  • v10.2.1
  • v10.3.0.pre
  • v10.2.0
  • v10.2.0-rc4
  • v10.2.0-rc3
  • v10.1.4
  • v10.2.0-rc2
40 results

lazy_spec.rb

Forked from GitLab.org / GitLab FOSS
6891 commits behind the upstream repository.
  • Yorick Peterse's avatar
    94d5416d
    Added Gitlab::Lazy · 94d5416d
    Yorick Peterse authored
    This class can be used to lazy-evaluate blocks of code the first time
    they're called. This can be useful when a method performs a certain
    heavy operation (e.g. a SQL query) that you only want to perform
    whenever the result is used for the first time.
    Verified
    94d5416d
    History
    Added Gitlab::Lazy
    Yorick Peterse authored
    This class can be used to lazy-evaluate blocks of code the first time
    they're called. This can be useful when a method performs a certain
    heavy operation (e.g. a SQL query) that you only want to perform
    whenever the result is used for the first time.
lazy_spec.rb 915 B
require 'spec_helper'

describe Gitlab::Lazy, lib: true do
  let(:dummy) { double(:dummy) }

  context 'when not calling any methods' do
    it 'does not call the supplied block' do
      expect(dummy).not_to receive(:foo)

      described_class.new { dummy.foo }
    end
  end

  context 'when calling a method on the object' do
    it 'lazy loads the value returned by the block' do
      expect(dummy).to receive(:foo).and_return('foo')

      lazy = described_class.new { dummy.foo }

      expect(lazy.to_s).to eq('foo')
    end
  end

  describe '#respond_to?' do
    it 'returns true for a method defined on the wrapped object' do
      lazy = described_class.new { 'foo' }

      expect(lazy).to respond_to(:downcase)
    end

    it 'returns false for a method not defined on the wrapped object' do
      lazy = described_class.new { 'foo' }

      expect(lazy).not_to respond_to(:quack)
    end
  end
end