Nano Hash - криптовалюты, майнинг, программирование

Rails 5 Rspec ActionController::UrlGenerationError

Просматривал другие подобные вопросы здесь, и все они, похоже, связаны с каким-то искаженным запросом (не предоставление id или неправильное включение параметров), но это не похоже на проблема, с которой я сталкиваюсь.

Маршрут точно есть, переход по маршруту в браузере работает нормально. Страница загружается, все. Но Rspec почему-то выдает ошибку UrlGenerationError.

Я пытался вручную указать имя контроллера в маршрутах, перейти на контроллер во множественном числе и даже использовать другой (множественный) контроллер. Похоже, что где-то есть проблема с какой-то другой конфигурацией, но ошибка, связанная с ошибкой URLGeneration, крайне бесполезна. Буду очень признателен за любые другие идеи.

У нас есть спецификации контроллера API в другом месте нашего приложения, которые, похоже, работают правильно, но я не могу сказать, в чем разница в настройке между тем и этим.

Моя ошибка:

  1) Spaceman::ReputationEnhancementsController GET show has a 200 status code
     Failure/Error: get :show

     ActionController::UrlGenerationError:
       No route matches {:action=>"show", :controller=>"spaceman/reputation_enhancements"}
     # ./spec/controllers/spaceman/reputation_enhancements_controller_spec.rb:10:in `block (3 levels) in <top (required)>'

Finished in 1.14 seconds (files took 6.13 seconds to load)
1 example, 1 failure

Failed examples:

rspec ./spec/controllers/spaceman/reputation_enhancements_controller_spec.rb:9 # Spaceman::ReputationEnhancementsController GET show has a 200 status code

Маршруты:

Spaceman::Engine.routes.draw do
  resource :reputation_enhancement, path: "reputation-enhancement", only: [ :show, :create ] do
    get :filter
  end
end

Тест: (Я пытался добавить здесь type: :controller, а также полностью уточнить, добавить вместо него Rspec.describe и т. д.)

require "rails_helper"

describe Spaceman::ReputationEnhancementsController do

  describe "GET show" do
    it "has a 200 status code" do
      get :show
      expect(response.status).to eq(200)
    end
  end

end

rake routes

filter_reputation_enhancement GET    /reputation-enhancement/filter(.:format) spaceman/reputation_enhancements#filter
       reputation_enhancement GET    /reputation-enhancement(.:format)        spaceman/reputation_enhancements#show
                              POST   /reputation-enhancement(.:format)        spaceman/reputation_enhancements#create

РЕДАКТИРОВАТЬ:

Я пытался вручную указать имя контроллера в маршрутах, перейти на контроллер во множественном числе и даже использовать другой (множественный) контроллер. Похоже, что где-то есть проблема с какой-то другой конфигурацией, но ошибка, связанная с ошибкой URLGeneration, крайне бесполезна. Буду очень признателен за любые другие идеи.

25.07.2017


Ответы:


1

Оказывается, проблема заключалась в том, что контроллер был частью гема, а маршруты для доступа к контроллеру не были включены по умолчанию.

Решается добавлением routes { Spaceman::Engine.routes } вверху внутри основного блока describe.

Все в порядке, чтобы оставить одиночные маршруты, и все остальное было настроено правильно. Осталось включить маршруты.

25.07.2017
  • Спасибо, routes { Rails.application.routes } работает. Есть ли удобный способ сделать это? Раздражает добавлять это для всего блока describe. 16.11.2017
  • Хм. Глубже не смотрел, извиняюсь. Я делаю образ, есть способ настроить какую-то опцию в rspec, чтобы установить это автоматически. 17.11.2017

  • 2

    Вы используете единственное число resource в своих маршрутах, но ваша спецификация запрашивает форму множественного числа «reputation_enhancements».

    См. этот бит в руководстве по маршрутизации для отдельных ресурсов и эта давняя проблема в трекере проблем Rails, которая объясняет, что нет хорошего способа заставить url_for сопоставляться с единственный ресурс.

    Чтобы решить эту проблему, либо укажите путь в спецификации, либо добавьте маршрут во множественном числе.

    25.07.2017
  • Где спецификация, запрашивающая форму множественного числа? Предполагается, что контроллер должен иметь множественное число даже с единственным маршрутом, если вы это имели в виду, поэтому я не уверен, где испорчено множественное число? 25.07.2017
  • Переключил все ссылки на контроллер на единственное число (путем назначения контроллера вручную в маршрутах), и проблема все еще существует. 25.07.2017
  • @Rockster160 Я добавил для вас дополнительную информацию. 25.07.2017
  • У меня такая же проблема с использованием нескольких ресурсов. (Переключился на другой контроллер, чтобы попытаться проверить, но он все еще не работает с той же ошибкой) 25.07.2017
  • Есть ли способ указать путь в моей спецификации? Я не могу найти способ вручную добавить путь. Я сделал маршрут во множественном числе, я попытался сделать контроллер в единственном числе, я прочитал другой пост, который вы прокомментировали, и не добился никакого прогресса. (их проблема снова заключалась в недопустимом синтаксисе маршрутизации, как и в большинстве других сообщений, которые я видел, похожих на этот) 25.07.2017
  • Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

    Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
    В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..