2014-08-29 50 views
1

我正在通过教程上的Cucumber和Rspec for RoR教科书工程软件即服务,以及通过edX.org上的存档课程。我遇到了一个试图与Rspec合作的问题。索引视图有一个表单发布到控制器方法,唯一的字段名称为:search_terms。在movies_controller.rb有这个方法:未定义的Rspec方法'post'

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> 

这是我的理解是,“后'是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

什么是你的规范助手? – 2014-08-29 09:43:46

+0

请问您可以在spec/spec_helper.rb文件中发布代码吗? – Surya 2014-08-29 09:45:27

回答

2

与最新版本的RSpec的Rails有运行规范

spec_helper.rb提供两个文件和rails_helper.rb

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

希望这会有帮助

+0

我在我的spec_helper文件中添加了“require'rails_helper'”并运行了bundle exec rspec,并且出现加载错误。错误是/gems/activesupport-3.2.18/lib/active_support/dependencies.rb:251:in'require':无法加载这样的文件 - rails_helper(LoadError)尽管这门课程在5月下旬结束,我正在运行在课程虚拟机上,它使用Rails 3.2。我想知道是否有一些问题源于此。 – Seytom 2014-08-29 14:10:12

+1

发现问题。令人尴尬的是,虽然我创建了spec/controllers文件夹,但我已将movies_controller_spec文件保存在spec文件夹中。将其移至控制器文件夹可解决问题。对不起,感谢您的帮助。 – Seytom 2014-08-29 15:08:01

相关问题