Sha256: 374a695033902e3b83e9f6fb1dd568d153d133ebc155637d50f8e45e37cec8a1

Contents?: true

Size: 1.38 KB

Versions: 2

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 { 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", {})
    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

2 entries across 2 versions & 1 rubygems

Version Path
split-4.0.3 spec/encapsulated_helper_spec.rb
split-4.0.2 spec/encapsulated_helper_spec.rb