Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

928
Vistas
En RSpec, la ejecución de un parche o una prueba de colocación dará como resultado un error ActionController::UrlGenerationError: No hay coincidencias de ruta

que quiero solucionar

Quiero que el parche o la prueba de Rspec tengan éxito. También probé PostsContoroller antes de esto, y estoy desconcertado porque no obtuve el mismo error al probar PostsContoroller.

Error

 Failures: 1) Api::V1::PostItemsController update Update Content Failure/Error: patch :update, params: { post: post_params } ActionController::UrlGenerationError: No route matches {:action=>"update", :controller=>"api/v1/post_items", :post=>{:id=>1, :content=>"Update-Content", :status=>false, :post_id=>1}} # ./spec/controllers/post_items_spec.rb:11:in `block (3 levels) in <main>' Finished in 0.35529 seconds (files took 5.58 seconds to load) 5 examples, 1 failure

Código

FactoryBot

libro.rb

 FactoryBot.define do factory :book, class: Post do sequence(:id) { |n| n} sequence(:title) { |n| "title#{n}" } sequence(:author) { |n| "author#{n}" } sequence(:image) { |n| "image#{n}"} end end

contenido.rb

 FactoryBot.define do factory :content, class: PostItem do sequence(:id) { |n| n } sequence(:content) { |n| "list#{n}"} sequence(:status) { false } end end

Especificaciones

post_items_spec.rb

 require 'rails_helper' RSpec.describe Api::V1::PostItemsController, type: :controller do describe 'update' do it 'Update Content' do book = create(:book) content = create(:content, post_id: book.id) post_params = { id: content.id, content: 'Update-Content', status: false, post_id: book.id } patch :update, params: { post: post_params } json = JSON.parse(response.body) expect(response.status).to eq(200) expect(json['Update-Content']).to eq('Update-content') end end end

Rutas

 **Rails.application.routes.draw do namespace :api do namespace :v1 do resources :posts resources :post_items end end end
over 4 years ago · Santiago Trujillo
1 Respuestas
Responde la pregunta

0

Los equipos de Rails y RSpec desaconsejan el uso de especificaciones de controlador y lo han hecho durante mucho tiempo. En su lugar, debería escribir una especificación de solicitud que envíe solicitudes HTTP reales.

 RSpec.describe 'Api V1 Post items', type: :request do let(:book) { create(:book) } describe "PATCH /api/v1/books" do context "with valid parameters" do subject do patch api_v1_post_item_path(book), params: { content: 'Update-Content' } end it { should be_successful } it "updates the content" do # refresh the record from the db expect { book.reload }.to change(book, :title).to('Update-Content') end it "includes the updated entity in the response body" do expect(response.parsed_body['content']).to eq 'Update-Content' end end # @todo write specs with invalid parameters # @todo write specs for authentication and authorization end end

Otro problema es que está generando identificaciones en su fábrica. No hagas esto nunca. Cuando realmente persiste en los registros, la base de datos asignará identificaciones automáticamente. Cuando use build_stubbed , FactoryBot creará una identificación simulada. El uso de una secuencia para generar ID invita a malas prácticas, como codificar ID en una especificación, y solo le causará dolores de cabeza.

Si realmente desea salvar esa especificación del controlador, el error de enrutamiento se debe al hecho de que le falta el parámetro ID, ya que lo está llamando como patch :update, params: { post: post_params } el parámetro id está enterrado en params[:post][:id] . Así que quieres patch :update, params: { id: post.id, post: post_params } , no recomiendo esto: utiliza el programa y escribe pruebas de prueba futuras que no permitan que se escapen todos los errores.

over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda