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