module Gitlab::Experiment::RSpecMatchers
Public Instance Methods
expect_tracking_on(experiment, negated, event, *event_args)
click to toggle source
# File lib/gitlab/experiment/rspec.rb, line 175 def expect_tracking_on(experiment, negated, event, *event_args) klass = experiment.instance_of?(Class) ? experiment : experiment.class unless klass <= Gitlab::Experiment raise( ArgumentError, "track matcher is limited to experiment instances and classes" ) end expectations = proc do |e| @experiment = e allow(e).to receive(:track).and_call_original if negated expect(e).not_to receive(:track).with(*[event, *event_args]) else if @expected_variant expect(@experiment.variant.name).to eq(@expected_variant), failure_message(:variant, event) end if @expected_context expect(@experiment.context.value).to include(@expected_context), failure_message(:context, event) end expect(e).to receive(:track).with(*[event, *event_args]).and_call_original end end if experiment.instance_of?(Class) || @on_next_instance wrapped_experiment(experiment, nil, true) { |e| expectations.call(e) } else expectations.call(experiment) end end
failure_message(failure_type, event)
click to toggle source
# File lib/gitlab/experiment/rspec.rb, line 210 def failure_message(failure_type, event) case failure_type when :variant <<~MESSAGE.strip expected #{@experiment.inspect} to have tracked #{event.inspect} for variant expected variant: #{@expected_variant} actual variant: #{@experiment.variant.name} MESSAGE when :context <<~MESSAGE.strip expected #{@experiment.inspect} to have tracked #{event.inspect} with context expected context: #{@expected_context} actual context: #{@experiment.context.value} MESSAGE end end
message_details()
click to toggle source
# File lib/gitlab/experiment/rspec.rb, line 148 def message_details message = '' message += %( into variant\n expected variant: #{@expected}) if @expected message += %(\n actual variant: #{@actual}) if @actual message end
require_experiment(experiment, matcher_name, classes: false)
click to toggle source
# File lib/gitlab/experiment/rspec.rb, line 84 def require_experiment(experiment, matcher_name, classes: false) klass = experiment.instance_of?(Class) ? experiment : experiment.class unless klass <= Gitlab::Experiment raise( ArgumentError, "#{matcher_name} matcher is limited to experiment instances#{classes ? ' and classes' : ''}" ) end if experiment == klass && !classes raise ArgumentError, "#{matcher_name} matcher requires an instance of an experiment" end experiment != klass end