FAQ / knapsack_pro / General questions for knapsack_pro gem

What is the order of RSpec hooks in the Queue Mode?

By default, RSpec runs before and after hooks, and they are called in the following order:

before :suite
before :context
before :example
after  :example
after  :context
after  :suite

When you use the Queue Mode in the knapsack_pro gem, you fetch a batch of test files from Knapsack Pro Queue API, and RSpec::Core::Runner executes it. For the given set of test files, the above hooks are called.

When tests are completed and another batch of tests is fetched from Queue API, the tests are executed by RSpec::Core::Runner again. This means the above hooks are called again.

The before/after :suite hooks would be called multiple times. This might be important for some users. For instance if you run some code in the before :suite hook, and perform cleanup in the after :suite hook expecting both hooks to be called only once. To execute hooks only once, you can use Queue Mode hooks.

Here you can find other hooks available for your test runner in the Queue Mode.

In the Queue Mode, the flow for before/after :suite would look like this:

1st batch of tests fetched from Queue API:

  • a_spec.rb
  • b_spec.rb
before KnapsackPro::Hooks::Queue.before_queue is called (only here)
before :suite is called
a_spec.rb and b_spec.rb is executed
after :suite is called

2nd batch of tests is fetched from Queue API (let's assume this is the last batch):

  • c_spec.rb
  • d_spec.rb
before :suite is called
c_spec.rb and d_spec.rb is executed
after :suite is called
KnapsackPro::Hooks::Queue.after_queue is called (only here)

# General questions for knapsack_pro gem
See questions outside of this category

Start using Knapsack Pro

Sign up and speed up your tests.