The great thing about Flipper is that the storage of feature flags can be adapted to whatever. This means you can use different storage mechanisms for different environments.
For CI/test environments, we recommend the memory adapter. Switching the default instance of Flipper to use the memory adapter is easy. Before each test, simply configure Flipper to use the memory adapter like so:
# Rails/Minitest example class ActiveSupport::TestCase setup do Flipper.instance = Flipper.new(Flipper::Adapters::Memory.new) end end # RSpec example RSpec.configure do |config| config.before(:each) do Flipper.instance = Flipper.new(Flipper::Adapters::Memory.new) end end
Including the snippet above means that each test will start fresh with all features disabled.
We find this the best route, but your application may have different needs. If you want some features to always be enabled, you can enable them right after switching to the memory adapter.
class ActiveSupport::TestCase setup do Flipper.instance = Flipper.new(Flipper::Adapters::Memory.new) Flipper.enable :accounts Flipper.enable :plausible end end
In the example above, the
plausible features would both start enabled for every test. Every other feature flag would start disabled.
Though defaulting to enabled is popular in the Flipper community, we typically take a bit different approach. For any feature flag, we usually have at least one test for when the feature is enabled and disabled. This ensures both sides of the coin are tested.
require 'test_helper' class DocumentationControllerTest < ActionDispatch::IntegrationTest test "returns 404 for documentation when feature disabled" do Flipper.disable(:docs) get documentation_path assert_response :not_found end test "renders documentation when feature enabled" do Flipper.enable(:docs) get documentation_path assert_response :success end end
That should be enough to get you started on the path to testing around your feature flags. But if you have any more questions, don't hesitate to reach out to us.