Como testar uma Rails API com Rspec

Anne Caroline Rocha
gtsw
Published in
3 min readNov 11, 2020

Primeiramente, será apresentado como criar uma API Rest usando Rails 5.0 a partir da API de clima disponível no site https://openweathermap.org/api. Em seguida, será instalado o pacote RSpec de Rails para que seja possível executar os testes dessa API.

Pré-requisitos

Criando uma API Rest com Ruby on Rails

Para criar uma API com Rails é necessário que seja feita a instalação completa do Rails 5.0 na sua máquina.

No terminal entrar na pasta do seu workspace e digitar o comando para criar um novo projeto de API em rails:

C:/workspace>rails new climateapi --api

Observe que esse projeto difere dos outros projetos por haver o termo ‘api

Com a aplicação criada, entrar na pasta do projeto criado e digitar o comando para instalar todas as bibliotecas do projeto.

C:/workspace/climateapi>bundle install

Caso ocorra algum erro referente ao sqlite, basta alterar no arquivo /climateapi/Gemfile.

Erro: “Access to XMLHttpRequest .. Has been blocked by CORS policy: No ‘Access-Control-Allow-Origin’ header is present on the requested resourse.”

gem 'sqlite3', '< 1.4'
gem 'rack-cors'

Em seguida, executar novamente o comando ‘bundle install’.

Na pasta config adicionar ao arquivo application.rb a configuração do CORS (Compartilhamento de Recursos de Origem Cruzada), que autoriza que essa API seja utilizada por outros sistemas.

#adicionar esse trecho do código
config.middleware.insert_before 0, "Rack::Cors" do .. end

Opções de recursos

  • métodos (string ou array): os métodos HTTP permitidos para o recurso.
  • headers (string ou array ou :any): Os cabeçalhos HTTP que serão permitidos na solicitação de recurso CORS. Use :anypara permitir quaisquer cabeçalhos na solicitação real.
  • expor (string ou array): Os cabeçalhos HTTP na resposta do recurso podem ser expostos ao cliente.
  • credenciais (booleanas): define o Access-Control-Allow-Credentialscabeçalho da resposta.
  • max_age (number): define o Access-Control-Max-Agecabeçalho da resposta.
  • if (Proc): Se o resultado do proc for verdadeiro, irá processar a solicitação como uma solicitação CORS válida.
  • variar (string ou matriz): uma lista de cabeçalhos HTTP para adicionar ao cabeçalho ‘Vary’

Isso resolverá o problema do CORS.

Na pasta controllers /climateapi/app/controllers/api/v1 criar o arquivo clima_controller.rb

Na pasta config /climateapi/config alterar o arquivo routes.rb

Executar o comando no terminal para criar as rotas

C:/workspace/climateapi>rails routes

Em seguida, rodar a API para verificar se os dados em formato JSON foram recuperados da API Rest original.

C:/workspace/climateapi>rails s -b 0.0.0.0 -p 3050

Acessar a URL local no navegador e ver se exibe o resultado: http://localhost:3050/api/v1/weather/Aracaju

Pronto! Sua API Rest em Ruby on Rails foi criada utilizando outro serviço de API disponível na internet.

Testando uma Rails API com Rspec

Agora que já temos uma Rails API criada, iremos instalar o rspec-rails e outras gems para que seja possível realizar os testes nessa API.

Abrir o arquivo Gemfile na raiz do mesmo projeto climateapi/Gemfile e incluir as seguintes gems na seção :test.

Entrar na pasta do projeto criado e digitar o comando para instalar as novas bibliotecas do projeto.

C:/workspace/climateapi>bundle install

Em seguida executar o comando para geração da pasta climateapi/spec.

C:/workspace/climateapi>rails generate rspec:install

Entrar nessa pasta e criar um novo arquivo climateapi/spec/clima_spec.rb

Em seguida, executar os testes utilizando o comando abaixo.

C:/workspace/climateapi>bundle exec rspec ./spec/weather_spec.rb

Observar que os testes passaram conforme o resultado esperado:

Livro “Simplificando Teste de Software

Anne Caroline Rocha é autora do livro “Simplificando Teste de Software”, que aborda o tema de Teste de Software utilizando uma linguagem simples e didática, ideal para quem está começando na área. Em 2020, escreveu o ebook “Investir ou não em teste de software?”. Clique aqui para adquirir o livro!

Ela acredita que compartilhar conhecimentos é a chave para um mundo melhor.

--

--