Подтвердить что ты не робот

Проблема с тестом rspec, undefined метод 'post'

Я пишу спецификацию для проверки поведения mashup_controller, когда кто-то отправляет запрос через URL-адрес. Мне нужно смоделировать параметры, содержащиеся в URL-адресе, и я прочитал, что метод post() сделает это, однако, когда я получу ошибку:

1) MashupController simulates query
     Failure/Error: post :create
     NoMethodError:
       undefined method `post' for
#<RSpec::Core::ExampleGroup::Nested_1:0x980bc50>
     # ./mashup_controller_rspec.rb:9:in `block (2 levels) in <top (required)>'

Finished in 0.20199 seconds 1 example, 1 failure

Failed examples:

rspec ./mashup_controller_rspec.rb:7 # MashupController simulates query

Вот мой код:

require 'spec_helper'
require 'mashup_controller.rb'

describe MashupController do
    it "simulates query" do
        post :create    
    end
end

Извините, если я не имею никакого смысла. Я очень новичок в рельсах и rspec. Любая помощь будет оценена по достоинству. Спасибо.

4b9b3361

Ответ 1

Если файл спецификации не находится под spec/controllers, методы, такие как get и post, не будут автоматически доступны rspec-rails.

Вам либо нужно пометить свою спецификацию:

describe MyController, type: :controller do
  # ...
end

или включить модуль:

describe MyController do
  include RSpec::Rails::ControllerExampleGroup
  # ...
end

Смотрите соответствующий код в rspec-rails.

Ответ 2

  • Убедитесь, что у вас есть gem spec-rails в вашем Gemfile
  • Ваш mashup_controller_rspec.rb должен находиться под spec/controllers

Ответ 3

Я использовал gem rspec-rails вместо gem spec-rails.

Ответ 4

В Rails 4 вы можете объявить тип тестов RSpec следующим образом :request и файл спецификации могут находиться в любом каталоге.

example: in spec/routes/users.rb
RSpec.describe 'UserRoutes', type: :request do
  ...
end

Ответ 5

Мое решение

describe MyController, type: :controller
...
end