Rspec的未定义方法'post'

时间:2014-08-29 09:36:12

标签: ruby-on-rails rspec saas

我正在教科书“工程软件即服务”中学习Cucumber和Rspec for RoR的教程,并浏览edX.org上的存档课程。我试图使用Rspec遇到了问题。索引视图有一个表单,该表单发布到控制器方法,唯一字段的名称为:search_terms。在movies_controller.rb中有这个方法:

class MoviesController < ApplicationController
  ...
  def search_tmdb
    @movies = Movie.find_in_tmdb(params[:search_terms])
    flash[:notice] = "Movie '#{params[:search_terms]}' not found."
    redirect_to movies_path
  end
end

在movies_controller_spec.rb中如下:

  require 'spec_helper'

  describe MoviesController do
    describe 'searching TMDb' do
      it 'should call the model method that performs TMDb search' do
        post :search_tmdb, {:search_terms => 'hardware'}
      end
      ...
    end
  end

Rspec给我以下错误:

NoMethodError:
       undefined method `post' for <RSpec::Core::ExampleGroup::Nested_1::Nested_1:0xb36c92c>

我的理解是'post'是Rspec应该在'it'块内提供的方法,以模拟表单的发布。我已经搜索过,但没有发现任何问题。我发现一个建议是建议用户正确的模型类继承,但我还没有模型,并且我已经看到这个代码工作,或者至少在截屏视频上提供有用的错误消息,而没有实现模型。非常感谢任何帮助。

EDITED

这是我的'spec_helper'文件

ENV["RAILS_ENV"] ||= 'test'

require File.expand_path("../../config/environment", __FILE__)
require 'rspec/rails'
require 'rspec/autorun'

Dir[Rails.root.join("spec/support/**/*.rb")].each { |f| require f }

RSpec.configure do |config|

  config.fixture_path = "#{::Rails.root}/spec/fixtures"
  config.use_transactional_fixtures = true
  config.infer_base_class_for_anonymous_controllers = false

  config.order = "random"

1 个答案:

答案 0 :(得分:3)

使用最新版本的RSpec Rails,有两个文件可用于运行规范

spec_helper.rbrails_helper.rb

您可能需要使用require 'rails_helper'来使post方法可用。

希望这有帮助