Skip to content

Flag missing use of `before_all` for member access in specs

Problem

In https://docs.gitlab.com/ee/development/testing_guide/best_practices.html#common-test-setup we suggest to use let_it_be + before_all for the following setups:

let_it_be(:project) { create(:project) }
let_it_be(:guest) { create(:user) }
let_it_be(:maintainer) { create(:user) }

before_all do
  project.add_guest(guest)
  project.add_maintainer(maintainer)
end

Using before_all above instead of before improves spec runtime by reducing the amount SQL queries.

Currently, we are not enforcing this technique by a 👮 rule.

Proposed solution

Flag the use of let_it_be + before:

# bad
let_it_be(:project) { create(:project) }
let_it_be(:guest) { create(:user) }

before do
  project.add_guest(guest)
end

# good
let_it_be(:project) { create(:project) }
let_it_be(:guest) { create(:user) }

before_all do
  project.add_guest(guest)
end

Real world example

Refs

Inspired by #373184 (comment 1101123605).

Edited by Peter Leitzen