1

Ich habe auf Rails 5 aktualisiert. Meine erste Hürde in Spezifikationen zu erhalten, ist eine 'No route matches' Fehler.So lösen Sie "Keine Route stimmt" Funktionstest Fehler in Rails 5

Bitte lesen Sie meinen Test und test_helper unten. Muss ich test_helper oder test.rb etwas hinzufügen? Wer kennt die Ursache oder wie löst man das?

.....

Ich habe einen einzigen Test ausgeführt wird bei dem Versuch, einfach einen Pass zu erhalten:

bin/rails test test/controllers/users_controller_test.rb:31 

, die das ist 'sollte neue get' Linie in meinem users_controller_test.rb

require 'test_helper' 
describe UsersController do 
//class UsersControllerTest < ActionDispatch::IntegrationTest 
    before do 
    glenn = users(:glenn) 
    sign_in(glenn) 
    end 

    it 'should get new' do 
    get new_user_url 
    value(response).must_be :success? 
    end 
end 

Dies führt zu dem folgenden Fehler.

Error: 
UsersController#test_0002_should get new: 
ActionController::UrlGenerationError: No route matches {:action=>"http://test.host/users/new", :controller=>"users"} 
test/controllers/users_controller_test.rb:32:in `block (2 levels) in <top (required)>' 

test_helper.rb

ENV['RAILS_ENV'] = 'test' 
require File.expand_path('../../config/environment', __FILE__) 
require 'rails/test_help' 
require 'minitest/rails' 

class ActionController::TestCase 
    include ActiveJob::TestHelper 
    include Devise::Test::ControllerHelpers 
end 

class ActionDispatch::IntegrationTest 
    include Devise::Test::IntegrationHelpers 
end 

class ActiveSupport::TestCase 
    ActiveRecord::Migration.check_pending! 
    fixtures :all 
    include ActionDispatch::TestProcess # fixture_file_upload 
end 

Antwort

0

Während diese troube-Schießen habe ich eine neue Schienen 5 App installiert devise und Minitest-Schienen ... und diese Prüfungen sind vorbei. Die neue URL-Stilsyntax funktioniert gut innerhalb des beschreibenden Blocks in meinen Controller-Tests. In der App, die sich auf diese Fragen bezieht, funktioniert die URL-Syntax jedoch nicht innerhalb des describe-Blocks, und der Fix - zumindest für den Augenblick - sollte den describe-Block durch eine Klasse ersetzen, die von ActionDispatch :: IntegrationTest erbt . Ich habe noch keine Ahnung, warum das so ist.

0

Ich hatte das gleiche Problem und konnte es zum Laufen bringen, obwohl ich mir nicht ganz sicher bin, warum es funktioniert.

Anscheinend ist die Art der Spezifikation notwendig.

Was ich, dass, wie oben in ähnlichen Fehlern geführt hatte:

require 'rails_helper' 

RSpec.describe TimingsController, type: :controller do 
    describe "GET new" do 
    it "renders the new template" do 
     get new_timing_path 
     expect(response).to be_successful 
    end 
    end 
end 

Was ich habe jetzt das funktioniert:

require 'rails_helper' 

RSpec.describe TimingsController, type: :controller do 
    describe "GET new", type: :request do 
    it "renders the new template" do 
     get new_timing_path 
     expect(response).to be_successful 
    end 
    end 
end 

So scheint es, wie der type: request Teil wesentlich ist.