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

当有人通过URL发送查询时,我正在编写一个规范来测试mashup_controller的行为。 我需要模拟URL中包含的参数,我读到post()方法会这样做,但是当我收到错误时:

1) MashupController simulates query Failure/Error: post :create NoMethodError: undefined method `post' for # # ./mashup_controller_rspec.rb:9:in `block (2 levels) in ' 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很新。 任何帮助,将不胜感激。 谢谢。

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

您需要标记您的规范:

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

或包括模块:

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

请参阅rspec-rails中的相关代码 。

  1. 确保你的Gemfile中有gem spec-rails
  2. 你的mashup_controller_rspec.rb应该在spec/controllers

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

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

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

我的解决方案是

 describe MyController, type: :controller ... end