problem with rspec test, undefined method 'post'

僤鯓⒐⒋嵵緔 提交于 2019-11-30 00:23:53

问题


I am writing a spec to test the behavior of the mashup_controller when someone sends a query through a URL. I need to simulate the parameters contained in the URL, and i read that the post() method will do that, however when i get an error:

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

Here is my code:

require 'spec_helper'
require 'mashup_controller.rb'

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

Sorry if I'm not making any sense. I am very new to rails and rspec. Any help would be appreciated. Thanks.


回答1:


If the spec file is not under spec/controllers, methods like get and post will not be automatically made available by rspec-rails.

You either need to tag your spec:

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

or include the module:

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

See the relevant code in rspec-rails.




回答2:


  1. Make sure you have gem spec-rails in your Gemfile
  2. Your mashup_controller_rspec.rb should be under spec/controllers



回答3:


I used gem rspec-rails instead of gem spec-rails.




回答4:


In Rails 4, you can declare the type of the RSpec tests as :request and the spec file can be in any directory.

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



回答5:


My solution is

describe MyController, type: :controller
...
end


来源:https://stackoverflow.com/questions/7135377/problem-with-rspec-test-undefined-method-post

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!