2014-08-29 73 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

相關問題