проблема с тестом rspec, неопределенный метод 'post' - PullRequest
20 голосов
/ 21 августа 2011

Я пишу спецификацию для проверки поведения 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.Любая помощь будет оценена.Спасибо.

Ответы [ 5 ]

32 голосов
/ 20 мая 2013

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

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

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

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

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

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

3 голосов
/ 25 марта 2012
  1. Убедитесь, что в вашем Gemfile есть gem spec-rails
  2. Ваш mashup_controller_rspec.rb должен быть меньше spec/controllers
1 голос
/ 01 января 2018

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

example: in spec/routes/users.rb
RSpec.describe 'UserRoutes', type: :request do
  ...
end
1 голос
/ 26 марта 2013

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

0 голосов
/ 06 октября 2014

Мое решение

<code>describe MyController, type: :controller
...
end
...