rspec测试问题,未定义方法'post'

时间:2011-08-20 23:32:38

标签: ruby-on-rails ruby rspec tdd bdd

当有人通过URL发送查询时,我正在编写一个规范来测试mashup_controller的行为。我需要模拟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

对不起,如果我没有任何意义。我对rails和rspec很新。任何帮助,将不胜感激。感谢。

5 个答案:

答案 0 :(得分:31)

如果规范文件不在spec/controllers下,则get不会自动提供postrspec-rails等方法。

您需要标记规范:

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

或包含模块:

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

the relevant code in rspec-rails

答案 1 :(得分:3)

  1. 确保Gemfile中有gem spec-rails
  2. 您的mashup_controller_rspec.rb应位于spec/controllers
  3. 之下

答案 2 :(得分:1)

我使用 gem rspec-rails 而不是gem spec-rails。

答案 3 :(得分:1)

在Rails 4中,您可以将RSpec测试的类型声明为:request,并且spec文件可以位于任何目录中。

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

答案 4 :(得分:0)

我的解决方案是

describe MyController, type: :controller
...
end