No tienes acceso a esta clase

¡Continúa aprendiendo! Únete y comienza a potenciar tu carrera

Filtrar posts - pruebas

16/33
Recursos

Aportes 3

Preguntas 1

Ordenar por:

¿Quieres ver más aportes, preguntas y respuestas de la comunidad?

Podría utilizarse un operador ternario en esta condicional?

Nos ahorramos unas lineas de codigo ademas de ser mucho mas legible al implementar la prueba de la siguiente forma?


  factory :post do
    title { Faker::Lorem.sentence }
    content { Faker::Lorem.paragraph }
    published {
      r = rand(0..1)
      r == 0 ? false : true
    }
    user
  end

Original

  factory :post do
    title { Faker::Lorem.sentence }
    content { Faker::Lorem.paragraph }
    published {
      r = rand(0..1)
      if r == 0
        false
      else
        true
      end
    }
    user
  end```

Espero sirva.

Tambien para implementar caracteristicas especificas, se pueden usar traits, para especificar y ser explicito en ciertas necesidades que debe de cumplir el factory:

FactoryBot.define do
  factory :post do
    title { 'Example title'}
    content { 'Example content' }
    published { false }
    user
  end

  trait :published_post do
    published { true }
  end
end

Y asi ya solo especificar el trait o traits que debera de cumplir el factory al momento de crear el objeto:

let(:example_post) { create :post, :published_post }
Alguien entiende cual el motivo de agregar get '/posts?search=Hola' si al final no esta utilizan el query param? Porque en el caso que lo utilizaría debería darle solo 2 post y no 3. En el caso que te interese en esta prueba la utilidad de un query param puedes en agregar lo siguiente: En "application\_controller.rb": ```js # GET /posts def index if params[:search].present? @posts = Post.where("title LIKE ?", "%#{params[:search]}%") else @posts = Post.where(published: true) end render json: @posts, status: :ok end ```Ejemplo de prueba "search": ```js describe "Search" do let!(:example_post_1) { create :post, :published_post, title: 'example_post_1'} let!(:example_post_2) { create :post, :published_post, title: 'example_post_2' } let!(:post_3) { create :post, :published_post, title: 'post_3' } it "should return posts by title" do get '/posts?search=post' payload = JSON.parse(response.body) expect(payload).to_not be_empty expect(payload.size).to eq(2) expect(payload.map { |p| p["id"]}.sort).to eq([example_post_1.id, example_post_2.id].sort) expect(response).to have_http_status(200) end end ``` Si generas esta prueba teniendo en cuenta un query param "search", el valor de "payload.size" seria igual 2 y buscarías que la prueba tenga éxito. En el caso que quieres que falle cambiar : expect(payload.size).to eq(3).