Commit graph

7 commits

Author SHA1 Message Date
Yorick Peterse
2fa4e2fb6a Evaluate benchmark blocks in the proper context
This ensures that blocks defines using "benchmark_subject" have access
to methods defined using let/subject & friends.
2015-10-05 16:27:41 +02:00
Yorick Peterse
22506ddc50 Added benchmark_subject method for benchmarks
This class method can be used in "describe" blocks to specify the
subject of a benchmark. This lets you write:

    benchmark_subject { Foo }

instead of:

    benchmark_subject { -> { Foo } }
2015-10-05 10:51:24 +02:00
Yorick Peterse
19893a1c10 Basic setup for an RSpec based benchmark suite
This benchmark suite uses benchmark-ips
(https://github.com/evanphx/benchmark-ips) behind the scenes. Specs can
be turned into benchmark specs by setting "benchmark" to "true" in the
top-level describe block like so:

    describe SomeClass, benchmark: true do

    end

Writing benchmarks can be done using custom RSpec matchers, for example:

    describe MaruTheCat, benchmark: true do
      describe '#jump_in_box' do
        it 'should run 1000 iterations per second' do
          maru = described_class.new

          expect { maru.jump_in_box }.to iterate_per_second(1000)
        end
      end
    end

By default the "iterate_per_second" expectation requires a standard
deviation under 30% (this is just an arbitrary default for now). You can
change this by chaining "with_maximum_stddev" on the expectation:

    expect { maru.jump_in_box }.to iterate_per_second(1000)
      .with_maximum_stddev(10)

This will change the expectation to require a maximum deviation of 10%.

Alternatively you can use the it block style to write specs:

    describe MaruTheCat, benchmark: true do
      describe '#jump_in_box' do
        subject { -> { described_class.new } }

        it { is_expected.to iterate_per_second(1000) }
      end
    end

Because "iterate_per_second" operates on a block, opposed to a static
value, the "subject" method must return a Proc. This looks a bit goofy
but I have been unable to find a nice way around this.
2015-10-02 17:00:23 +02:00
Stan Hu
8820785c8f Fix emoji URLs in Markdown when relative_url_root is used
Also adds the ability to run rspecs with relative_url_defined on the enviornment. For example:

RELATIVE_URL_ROOT=/gitlab rspec

Closes #1728
2015-09-06 09:46:10 -07:00
Robert Speicher
05f9a6a9c4 Update Markdown feature to allow for multiple pipelines 2015-07-28 18:56:27 -04:00
Robert Speicher
0d5cf111f3 Move custom matchers to their own files under spec/support/matchers 2015-07-22 00:01:17 -04:00
Robert Speicher
a2ecfdc585 Move access-related matchers to their own module 2015-07-22 00:01:17 -04:00