Sha256: 55fd3835e50ff74ac77e95899908e10ecf8455b4939f957cb978ecd29c6253f2

Contents?: true

Size: 1.38 KB

Versions: 8

Compression:

Stored size: 1.38 KB

Contents

# frozen_string_literal: true
require 'spec_helper'

describe Split::EncapsulatedHelper do
  include Split::EncapsulatedHelper


  def params
    raise NoMethodError, 'This method is not really defined'
  end

  describe "ab_test" do
    before do
      allow_any_instance_of(Split::EncapsulatedHelper::ContextShim).to receive(:ab_user)
      .and_return(mock_user)
    end

    it "should not raise an error when params raises an error" do
      expect{ params }.to raise_error(NoMethodError)
      expect(lambda { ab_test('link_color', 'blue', 'red') }).not_to raise_error
    end

    it "calls the block with selected alternative" do
      expect{|block| ab_test('link_color', 'red', 'red', &block) }.to yield_with_args('red', nil)
    end

    context "inside a view" do

      it "works inside ERB" do
        require 'erb'
        template = ERB.new(<<-ERB.split(/\s+/s).map(&:strip).join(' '), nil, "%")
          foo <% ab_test(:foo, '1', '2') do |alt, meta| %>
            static <%= alt %>
          <% end %>
        ERB
        expect(template.result(binding)).to match /foo  static \d/
      end

    end
  end

  describe "context" do
    it 'is passed in shim' do
      ctx = Class.new{
        include Split::EncapsulatedHelper
        public :session
      }.new
      expect(ctx).to receive(:session){{}}
      expect{ ctx.ab_test('link_color', 'blue', 'red') }.not_to raise_error
    end
  end
end

Version data entries

8 entries across 8 versions & 1 rubygems

Version Path
split-3.3.2 spec/encapsulated_helper_spec.rb
split-3.3.1 spec/encapsulated_helper_spec.rb
split-3.3.0 spec/encapsulated_helper_spec.rb
split-3.2.0 spec/encapsulated_helper_spec.rb
split-3.1.1 spec/encapsulated_helper_spec.rb
split-3.1.0 spec/encapsulated_helper_spec.rb
split-3.0.0 spec/encapsulated_helper_spec.rb
split-2.2.0 spec/encapsulated_helper_spec.rb