Feature Toggles em Ruby: Implementação e Testes com RSpec
Roberson Miguel
Posted on August 9, 2024
Seguindo essa sequencia de memórias que decidi tirar das anotações e publicar, vou me aprofundar em alguns termos e praticas que já comentei nos posts anteriores.
Neste post, vamos explorar como implementar Feature Toggles em uma aplicação Ruby, integrando-os ao Rails e testando a funcionalidade com RSpec.
O que são Feature Toggles?
Feature Toggles (ou Feature Flags) são uma prática poderosa no desenvolvimento de software que permite habilitar ou desabilitar funcionalidades de forma dinâmica. Isso é particularmente útil em ambientes onde o deploy contínuo é praticado, pois permite que novas funcionalidades sejam lançadas de maneira controlada, sem impactar todos os usuários de uma vez.
Feature Toggles são switches que permitem ativar ou desativar partes do código sem a necessidade de realizar novos deploys. Eles podem ser configurados para diferentes cenários, como:
- Lançamento de novas funcionalidades gradualmente para um pequeno grupo de usuários antes de lançar para todos.
- Experimentos A/B testing onde diferentes grupos de usuários experimentam diferentes versões de uma funcionalidade.
- Deploy seguro, onde funcionalidades podem ser ativadas apenas quando necessário, mesmo após serem implementadas e deployadas.
Implementação de Feature Toggles em Ruby
Para implementar Feature Toggles em uma aplicação Rails, vamos utilizar um approach simples baseado em configurações dentro do código. Vamos começar com um exemplo prático.
1. Configuração Simples de Feature Toggles
Primeiro, podemos criar uma configuração simples de Feature Toggles em config/initializers/feature_toggles.rb
:
# config/initializers/feature_toggles.rb
module FeatureToggles
FEATURES = {
new_dashboard: false,
beta_feature: true,
}
def self.enabled?(feature)
FEATURES[feature]
end
end
Neste exemplo, temos dois toggles: new_dashboard
e beta_feature
. O new_dashboard
está desativado (false
), enquanto o beta_feature
está ativado (true
).
2. Uso de Feature Toggles no Código
Com os toggles configurados, podemos utilizá-los no código para controlar o fluxo das funcionalidades:
class DashboardController < ApplicationController
def show
if FeatureToggles.enabled?(:new_dashboard)
render :new_dashboard
else
render :old_dashboard
end
end
end
Aqui, a renderização da view depende do estado do feature toggle new_dashboard
.
Testando Feature Toggles com RSpec
Vamos agora escrever testes utilizando RSpec para garantir que as funcionalidades controladas pelos toggles se comportem conforme esperado.
1. Configuração do RSpec
Certifique-se de que o RSpec está configurado no seu projeto. Você pode adicionar a gem ao seu Gemfile
e executar bundle install
:
group :test do
gem 'rspec-rails'
end
Depois, inicialize o RSpec:
rails generate rspec:install
2. Escrevendo Testes para Feature Toggles
Agora, vamos escrever testes para verificar o comportamento da DashboardController
dependendo do estado do toggle.
# spec/controllers/dashboard_controller_spec.rb
require 'rails_helper'
RSpec.describe DashboardController, type: :controller do
describe 'GET #show' do
context 'when new_dashboard feature is enabled' do
before do
allow(FeatureToggles).to receive(:enabled?).with(:new_dashboard).and_return(true)
end
it 'renders the new_dashboard template' do
get :show
expect(response).to render_template(:new_dashboard)
end
end
context 'when new_dashboard feature is disabled' do
before do
allow(FeatureToggles).to receive(:enabled?).with(:new_dashboard).and_return(false)
end
it 'renders the old_dashboard template' do
get :show
expect(response).to render_template(:old_dashboard)
end
end
end
end
Explicação dos Testes:
Contexto quando
new_dashboard
está habilitado: Usamosallow
para mockar o retorno deFeatureToggles.enabled?
e forçar o retornotrue
. O teste então verifica se o templatenew_dashboard
é renderizado.Contexto quando
new_dashboard
está desabilitado: Similar ao teste anterior, mas forçando o retornofalse
e verificando se o templateold_dashboard
é renderizado.
Feature Toggles são uma ferramenta poderosa para controlar o lançamento de funcionalidades em uma aplicação. Com a abordagem apresentada, você pode começar a implementar toggles simples em sua aplicação Ruby e garantir que eles funcionem conforme esperado utilizando RSpec para testes.
Essa abordagem permite que novas funcionalidades sejam testadas em produção de forma controlada, reduzindo o risco de bugs afetarem todos os usuários de uma vez. Além disso, ao implementar testes robustos, você pode assegurar que o comportamento da aplicação se adapte corretamente à ativação ou desativação dessas funcionalidades.
Posted on August 9, 2024
Join Our Newsletter. No Spam, Only the good stuff.
Sign up to receive the latest update from our blog.
Related
November 30, 2024