<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Isadora Rocha</title>
    <description>The latest articles on DEV Community by Isadora Rocha (@rochaisadora).</description>
    <link>https://dev.to/rochaisadora</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F1142610%2Fc36f1f2a-985c-4c2c-8b65-0643ab13f35d.jpg</url>
      <title>DEV Community: Isadora Rocha</title>
      <link>https://dev.to/rochaisadora</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/rochaisadora"/>
    <language>en</language>
    <item>
      <title>Utilizando Jbuilder no Rails - Parte 1</title>
      <dc:creator>Isadora Rocha</dc:creator>
      <pubDate>Tue, 17 Sep 2024 14:57:35 +0000</pubDate>
      <link>https://dev.to/rochaisadora/utilizando-jbuilder-no-rails-parte-1-3gii</link>
      <guid>https://dev.to/rochaisadora/utilizando-jbuilder-no-rails-parte-1-3gii</guid>
      <description>&lt;h3&gt;
  
  
  &lt;strong&gt;Jbuilder&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Facilitar a criação de response em formato JSON a partir dos dados de modelos do Rails. Utilizado em APIs para &lt;strong&gt;serializar dados e construir documentos JSON&lt;/strong&gt; complexos de maneira eficiente e legível. &lt;br&gt;
Para os familiarizados de Java, é semelhante ao &lt;code&gt;Serializable&lt;/code&gt;. &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Jbuilder em Rails
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;json.data! @articles do |article|
  json.extract! article, :id, :title, :content
end
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;Serializable em Java
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;import java.io.Serializable;

public class Article implements Serializable {
    private int id;
    private String title;
    private String content;

    // Getters e Setters
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;p&gt;ESSE POST É UMA CONTINUAÇÃO DO &lt;a href="https://dev.to/rochaisadora/respec-estrutura-de-teste-em-ruby-on-rails-3jce"&gt;REspec Estrutura de Teste em Ruby on Rails&lt;/a&gt;&lt;/p&gt;




&lt;p&gt;No &lt;strong&gt;CONTROLLER&lt;/strong&gt;, em &lt;code&gt;articles_controller.rb&lt;/code&gt;: &lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F64hvl323lea42ppoueda.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F64hvl323lea42ppoueda.png" alt="ARTICLES CONTROLLER" width="" height=""&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Foi alterado a linha &lt;code&gt;render JSON&lt;/code&gt; - que está comentado na imagem acima - pois o controller não deve fazer duas coisas ao mesmo tempo, quebrando o princípio &lt;strong&gt;DRY (Don't Repeat Yourself)&lt;/strong&gt;.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;ANTES
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;render json: Article.all, status: :ok
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Aqui, o JSON é gerado diretamente no controller, o que &lt;strong&gt;faz com que ele cuide de duas coisas: buscar os dados e formatar a resposta&lt;/strong&gt;, o que quebra o princípio de responsabilidade única.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;DEPOIS
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;@articles = Article.all
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Agora, o controller &lt;strong&gt;apenas busca os dados&lt;/strong&gt;. A renderização e formatação JSON devem ser tratadas no &lt;strong&gt;view&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Na &lt;strong&gt;VIEW&lt;/strong&gt;, em &lt;code&gt;views &amp;gt;&amp;gt; api &amp;gt;&amp;gt; v1 &amp;gt;&amp;gt; articles &amp;gt;&amp;gt; index.json.jbuilder&lt;/code&gt;:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;em&gt;OBS: Para funcionar corretamente, é importante deixar o namespace corretamente, dentro das pastas api/v1&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fg252gxb4f5tjb0lorgod.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fg252gxb4f5tjb0lorgod.png" alt="VIEW JBUILDER" width="" height=""&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Bizu para que eu me lembre: &lt;strong&gt;json.bloco/nome 'retorna'&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Como assim?&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Por exemplo, o meu JSON de nome batata, retorna ‘BaTaTa’ no meu body. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F9vdvulbl7zrqyj5li7zb.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F9vdvulbl7zrqyj5li7zb.png" alt="POSTMAN" width="" height=""&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h3&gt;
  
  
  OUTRO EXEMPLO
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;json.array! @articles do |article|
  json.id article
end
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;A função array! de JSON de Articles(do controller), faça que cada article retorne um bloco JSON chamado &lt;code&gt;id&lt;/code&gt;, e dentro desse bloco, está dizendo que para cada article, o &lt;code&gt;Jbuilder&lt;/code&gt;deve criar uma chave chamada &lt;code&gt;id&lt;/code&gt;.  &lt;/p&gt;

&lt;p&gt;Segue a imagem para melhor visualização: &lt;br&gt;
&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ffn39y6vplegrl1mn2rf3.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ffn39y6vplegrl1mn2rf3.png" alt="array articles" width="" height=""&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;RECOMENDAÇÃO&lt;/strong&gt;&lt;br&gt;
Ao invés de utilizar o &lt;code&gt;json.array!&lt;/code&gt;, utilize o &lt;code&gt;json.data&lt;/code&gt; para não haver atritos em utilizar outros componentes do jbuilder. &lt;/p&gt;

&lt;h3&gt;
  
  
  DEFINIR RETORNO SOMENTE DO TITLE DOS ARTICLES PARA O JSON
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;json.data @articles do |article|
  json.title article.title
end
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Segue a imagem para melhor visualização:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fi4lpvn38k77baow5qtny.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fi4lpvn38k77baow5qtny.png" alt="title json" width="" height=""&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;CRÉDITOS e RECOMENDAÇÃO: &lt;a href="https://www.youtube.com/watch?v=sFkl8g9p9gU&amp;amp;t" rel="noopener noreferrer"&gt;puts_dev&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Esse post tem somente a finalidade de consolidar o que aprendi. Qualquer dúvida ou erro que tenha visto, pode me avisar!&lt;/em&gt;&lt;/p&gt;

</description>
      <category>json</category>
      <category>rails</category>
      <category>ruby</category>
      <category>api</category>
    </item>
    <item>
      <title>REspec Estrutura de Teste em Ruby on Rails</title>
      <dc:creator>Isadora Rocha</dc:creator>
      <pubDate>Tue, 03 Sep 2024 22:15:56 +0000</pubDate>
      <link>https://dev.to/rochaisadora/respec-estrutura-de-teste-em-ruby-on-rails-3jce</link>
      <guid>https://dev.to/rochaisadora/respec-estrutura-de-teste-em-ruby-on-rails-3jce</guid>
      <description>&lt;h3&gt;
  
  
  Considere a aplicação já criada
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Nosso model é &lt;strong&gt;Article&lt;/strong&gt;, com os atributos &lt;strong&gt;title(string)&lt;/strong&gt; e &lt;strong&gt;content(text)&lt;/strong&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;⇾ Utilizando &lt;code&gt;rails c&lt;/code&gt; no terminal&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Criaremos um array de hashes utilizando &lt;code&gt;rails c&lt;/code&gt; para um teste rápido&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;blog(dev)* articles = [
blog(dev)*   {title: 'art 1', content: 'conteudo do art 1'},
blog(dev)*   {title: 'art 2', content: 'conteudo do art 2'},
blog(dev)*   {title: 'art 3', content: 'conteudo do art 3'}
blog(dev)&amp;gt; ]
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;⇾ Utilizando arquivo &lt;code&gt;seeds.rb&lt;/code&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;O arquivo &lt;code&gt;seeds.rb&lt;/code&gt; é usado para configurar um ambiente de desenvolvimento ou &lt;strong&gt;teste com dados de exemplo&lt;/strong&gt;, ou para &lt;strong&gt;fornecer dados iniciais&lt;/strong&gt; ao banco de dados de produção. Ao executar o comando &lt;code&gt;rails db:seed&lt;/code&gt;, ele rodará o arquivo e insere os dados no banco de dados. &lt;/p&gt;

&lt;p&gt;No caso, o uso do &lt;code&gt;rails c&lt;/code&gt;, os dados são imediatamente criados no banco de dados, &lt;strong&gt;mas essa ação não fica registrada em nenhum arquivo&lt;/strong&gt;. Portanto, é adequado para &lt;strong&gt;testes rápidos ou manipulações de dados interativas&lt;/strong&gt; que você não precisa necessariamente registrar para uso futuro.&lt;/p&gt;

&lt;p&gt;Agora, deve-se colocar o mesmo array de hashes dentro do arquivo &lt;code&gt;seeds.rb&lt;/code&gt;para ficar registrado. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F9gzvm037q3dz3cedy13t.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F9gzvm037q3dz3cedy13t.png" alt="Image description" width="" height=""&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;E, por fim, executar &lt;strong&gt;&lt;code&gt;Article.create(articles)&lt;/code&gt;&lt;/strong&gt; no &lt;code&gt;rails c&lt;/code&gt;.&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;⇾ Agora, vamos ao controller&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;Criar uma pasta, dentro da pasta &lt;strong&gt;controllers&lt;/strong&gt;, chamada &lt;strong&gt;api&lt;/strong&gt;. Logo após, criar outra pasta chamada v1. &lt;br&gt;
É uma boa prática para não deixar tudo junto na aplicação. &lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Agora, no arquivo &lt;code&gt;articles_controller.rb&lt;/code&gt;, devemos alterar a &lt;code&gt;class ArticlesController &amp;lt; AplicattionController&lt;/code&gt; para:&lt;br&gt;
&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;class Api::V1::ArticlesController &amp;lt; ActionController::API
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;Dentro do método index, adicionar um render json - um retorno para a requisição GET da aplicação.
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;def index
    render json: { message: 'carregado'}
end
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;CÓDIGO COMPLETO&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;class Api::V1::ArticlesController &amp;lt; ActionController::API
  def index
    Article.all
    render json: { message: 'carregado'}
  end
end
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;GET &lt;code&gt;127.0.0.1:3000/articles&lt;/code&gt; no POSTMAN.&lt;br&gt;
&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fa27qyiesjaxffb9mri6m.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fa27qyiesjaxffb9mri6m.png" alt="Image description" width="" height=""&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;OBS.: talvez tenha ocorrido um erro, deve-se configurar as rotas no arquivo &lt;code&gt;routes.rb&lt;/code&gt;.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;resources :articles, only: :index
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;⇾ Agora, vamos ao routes&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Como não iremos utilizar as views, precisamos especificar um formato obrigatório (&lt;em&gt;constraints&lt;/em&gt;), no caso utilizaremos json e xml, como exemplo. &lt;/p&gt;

&lt;p&gt;Em &lt;code&gt;config &amp;gt; routes.rb&lt;/code&gt;, vamos precisar definir &lt;code&gt;namespaces&lt;/code&gt; e &lt;code&gt;constraints&lt;/code&gt;.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;namespace :api, constraints: -&amp;gt;(req) { %w[json].include? req.format } do
    namespace :v1 do
      resources :articles, only: :index
    end
  end
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;O &lt;code&gt;constraints&lt;/code&gt; ficará na mesma linha do no &lt;code&gt;namespace :api&lt;/code&gt; para que todas as rotas dentro dessa pasta sigam a mesma regra. &lt;/li&gt;
&lt;/ul&gt;




&lt;p&gt;&lt;strong&gt;⇾ GEMFILE&lt;/strong&gt;&lt;br&gt;
Dentro do &lt;strong&gt;&lt;code&gt;group :development do end&lt;/code&gt;&lt;/strong&gt;, adicionar a gem do &lt;strong&gt;RSpec&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;# Testes - [https://github.com/rspec/rspec-rails]
  gem 'rspec-rails', '~&amp;gt; 7.0.0'
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Em seguida, no terminal rodar &lt;code&gt;bundle install&lt;/code&gt; para atualizar a gem. E por fim, executar &lt;code&gt;rails g rspec:install&lt;/code&gt;.&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;⇾ SPEC &lt;br&gt;
Dentro da pasta spec&lt;/strong&gt;, criaremos uma pasta chamada &lt;strong&gt;request&lt;/strong&gt;, e dentro dessa pasta, criaremos um arquivo chamada: &lt;code&gt;articles_spec.rb&lt;/code&gt;.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;require 'rails_helper'
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Importar o arquivo &lt;code&gt;rails_helper.rb&lt;/code&gt;, carrega o ambiente de teste e configurações necessárias para rodar os testes.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;RSpec.describe 'Articles' do
end
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Definir um grupo de testes para a entidade &lt;strong&gt;Articles&lt;/strong&gt;. &lt;br&gt;
&lt;strong&gt;&lt;code&gt;RSpec.describe&lt;/code&gt;&lt;/strong&gt; é a forma de agrupar e descrever testes em RSpec.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;before(:each) { Article.create(title: 'art 2', content: 'conteudo do art 2') }
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Criar um &lt;strong&gt;&lt;code&gt;article&lt;/code&gt;&lt;/strong&gt; com o título &lt;strong&gt;'art 2'&lt;/strong&gt; e o &lt;strong&gt;&lt;code&gt;content&lt;/code&gt;&lt;/strong&gt; &lt;strong&gt;'conteúdo do art 2'&lt;/strong&gt; antes de cada teste ser executado.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;*&lt;em&gt;Por quê?: *&lt;/em&gt; garantir que cada teste dentro desse grupo comece com um estado consistente, com pelo menos um artigo salvo no banco de dados.
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;require 'rails_helper'

RSpec.describe 'Articles' do
  before(:each) { Article.create(title: 'art 2', content: 'conteudo do art 2') }

(você está aqui)
  context "GET api/v1/articles" do

  end
end
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Dentro do bloco &lt;code&gt;RSpec.describe&lt;/code&gt;, adicionar o bloco &lt;strong&gt;&lt;code&gt;context "GET api/v1/articles" do end&lt;/code&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Serve para agrupar testes relacionados à rota &lt;code&gt;**GET api/v1/articles**&lt;/code&gt;. &lt;code&gt;context&lt;/code&gt;é usado para organizar os testes em torno de um cenário ou contexto específico.&lt;/p&gt;

&lt;p&gt;Agora, adicionaremos outro bloco &lt;code&gt;**it 'responds with status Ok' do end**&lt;/code&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;...
context "GET api/v1/articles" do
(você está aqui)
    it 'responds with status Ok' do

    end
  end
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Esse bloco define um teste individual. Dentro do bloco &lt;code&gt;it&lt;/code&gt; é uma descrição do que o teste deve verificar, neste caso, se a resposta da rota &lt;code&gt;GET api/v1/articles.json&lt;/code&gt; retorna um &lt;code&gt;status Ok (200).&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Dentro do bloco &lt;code&gt;it&lt;/code&gt;, deve adicionar essas duas linhas:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;context "GET api/v1/articles" do
    it 'responds with status Ok' do
(você está aqui)
      get '/api/v1/articles.json'
      expect(response).to have_http_status(:ok)
    end
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;O &lt;strong&gt;&lt;code&gt;get '/api/v1/articles.json'&lt;/code&gt;&lt;/strong&gt;, faz uma requisição HTTP GET para a rota &lt;code&gt;/api/v1/articles.json.&lt;/code&gt;. Esse método simula uma chamada à API.&lt;/p&gt;

&lt;p&gt;O &lt;strong&gt;&lt;code&gt;expect(response).to have_http_status(:ok)&lt;/code&gt;&lt;/strong&gt;, verifica se a resposta da requisição tem o &lt;code&gt;status :ok (200).&lt;/code&gt; Se a API responder com um &lt;code&gt;status&lt;/code&gt; diferente, o teste falhará.&lt;/p&gt;

&lt;p&gt;Por fim, adicionar mais um bloco &lt;code&gt;it&lt;/code&gt; (não é dentro do bloco &lt;code&gt;it&lt;/code&gt; anterior).&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;...
it 'responds with correct persistes article json' do
      get '/api/v1/articles.json'
      expect(response.body).to include('art 2')
      expect(response.body).to include('conteudo do art 2')
end
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;O &lt;code&gt;it 'responds with correct persisted article json' do&lt;/code&gt;, define outro teste individual, que verifica se o JSON retornado pela API &lt;strong&gt;contém os dados do artigo que foi criado no &lt;code&gt;before&lt;/code&gt;.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;O &lt;code&gt;expect(response.body).to include('art 2')&lt;/code&gt;, verifica se o corpo da resposta (response.body) inclui o título 'art 2'. &lt;/p&gt;

&lt;p&gt;*&lt;em&gt;⇾ CÓDIGO COMPLETO *&lt;/em&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;require 'rails_helper'

RSpec.describe 'Articles' do
  before(:each) { Article.create(title: 'art 2', content: 'conteudo do art 2') }

  context "GET api/v1/articles" do
    it 'responds with status Ok' do
      get '/api/v1/articles.json'
      expect(response).to have_http_status(:ok)
    end

    it 'responds with correct persistes article json' do
      get '/api/v1/articles.json'
      expect(response.body).to include('art 2')
      expect(response.body).to include('conteudo do art 2')
    end
  end
end

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;RETORNANDO AO CONTROLLER&lt;/strong&gt;&lt;br&gt;
Ao invés de:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;class Api::V1::ArticlesController &amp;lt; ActionController::API
  def index
    Article.all
    render json: { message: 'carregado'}
  end
end
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Vamos alterar para que a API retorne todos os dados, e que seja &lt;code&gt;status OK&lt;/code&gt;.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;class Api::V1::ArticlesController &amp;lt; ActionController::API
  def index
    render json: Article.all, status: :ok
  end
end
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;⇾ Para testar o RSpec&lt;/strong&gt;&lt;br&gt;
No terminal, executar &lt;strong&gt;&lt;code&gt;rspec&lt;/code&gt;&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;➜  blog git:(main) ✗ rspec
.

Finished in 0.05506 seconds (files took 2.19 seconds to load)
1 example, 0 failures

➜  blog git:(main) ✗ 
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Essa mensagem indica que ocorreu tudo correto. &lt;/p&gt;




&lt;p&gt;*&lt;em&gt;⇾ Para testar no Postman *&lt;/em&gt;&lt;br&gt;
Como definimos como json e xml, as rotas devem ser: &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;GET &lt;code&gt;127.0.0.1:3000/articles.json&lt;/code&gt; ou,&lt;/li&gt;
&lt;li&gt;GET &lt;code&gt;127.0.0.1:3000/articles.xml&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;É isso. Obrigada! &lt;/p&gt;

&lt;p&gt;REFERÊNCIAS: &lt;br&gt;
&lt;strong&gt;Api app/Rails (Rails Guides):&lt;/strong&gt; &lt;a href="https://guides.rubyonrails.org/api_app.html" rel="noopener noreferrer"&gt;https://guides.rubyonrails.org/api_app.html&lt;/a&gt;&lt;br&gt;
&lt;strong&gt;Routing/Rotas (Rails Guides):&lt;/strong&gt; &lt;a href="https://guides.rubyonrails.org/routing.html" rel="noopener noreferrer"&gt;https://guides.rubyonrails.org/routing.html&lt;/a&gt;&lt;br&gt;
&lt;strong&gt;RSpec Rails:&lt;/strong&gt; &lt;a href="https://github.com/rspec/rspec-rails" rel="noopener noreferrer"&gt;https://github.com/rspec/rspec-rails&lt;/a&gt;&lt;br&gt;
&lt;strong&gt;Rails Status codes:&lt;/strong&gt; &lt;a href="http://www.railsstatuscodes.com/" rel="noopener noreferrer"&gt;http://www.railsstatuscodes.com/&lt;/a&gt;&lt;br&gt;
**Action Controller API: **&lt;a href="https://api.rubyonrails.org/classes/ActionController/API.html" rel="noopener noreferrer"&gt;https://api.rubyonrails.org/classes/ActionController/API.html&lt;/a&gt;&lt;br&gt;
**Introdução a Api com Rails - primeiros passos: **&lt;a href="https://www.youtube.com/watch?v=cj3GIO2CETo" rel="noopener noreferrer"&gt;https://www.youtube.com/watch?v=cj3GIO2CETo&lt;/a&gt;&lt;/p&gt;

</description>
      <category>api</category>
      <category>rails</category>
      <category>ruby</category>
      <category>testing</category>
    </item>
  </channel>
</rss>
