2012-08-06 85 views
1

我跑我的RSpec的測試中,它的輸出如下:Rspec似乎缺少預期方法......這是正確的嗎?

Failure/Error: expect { 
NoMethodError: 
    undefined method `[]' for nil:NilClass 
# ./spec/controllers/users_controller_spec.rb:44:in `block (4 levels) in <top (required)>' 

該錯誤引用該生產線是它說:「期待{」行。我不太確定這裏到底會出現什麼問題。

以下是完整的規格:

require 'spec_helper' 

describe UsersController do 

    def valid_attributes 
     { 
     :username => "tester", 
     :email => "[email protected]", 
     :password => "testingpass" 
     } 
    end 

    def valid_session 
    {} 
    end 

    describe "POST create" do 
    describe "with valid params" do 
     it "creates a new User" do 
     expect { 
      post :create, {:user => valid_attributes , :format => :json}, valid_session 
     }.to change(User, :count).by(1) 
     end 
    end 
    end 
end 

上正在發生的事情錯在這裏的任何想法?

更新

一個評論者要求將spec_helper.rb文件。我在下面發佈它......這是由rspec生成的默認值。

# This file is copied to spec/ when you run 'rails generate rspec:install' 
ENV["RAILS_ENV"] ||= 'test' 
require File.expand_path("../../config/environment", __FILE__) 
require 'rspec/rails' 
require 'rspec/autorun' 

# Requires supporting ruby files with custom matchers and macros, etc, 
# in spec/support/ and its subdirectories. 
Dir[Rails.root.join("spec/support/**/*.rb")].each {|f| require f} 

RSpec.configure do |config| 
    # ## Mock Framework 
    # 
    # If you prefer to use mocha, flexmock or RR, uncomment the appropriate line: 
    # 
    # config.mock_with :mocha 
    # config.mock_with :flexmock 
    # config.mock_with :rr 

    # Remove this line if you're not using ActiveRecord or ActiveRecord fixtures 
    config.fixture_path = "#{::Rails.root}/spec/fixtures" 

    # If you're not using ActiveRecord, or you'd prefer not to run each of your 
    # examples within a transaction, remove the following line or assign false 
    # instead of true. 
    config.use_transactional_fixtures = true 

    # If true, the base class of anonymous controllers will be inferred 
    # automatically. This will be the default behavior in future versions of 
    # rspec-rails. 
    config.infer_base_class_for_anonymous_controllers = false 

    # Run specs in random order to surface order dependencies. If you find an 
    # order dependency and want to debug it, you can fix the order by providing 
    # the seed, which is printed after each run. 
    #  --seed 1234 
    config.order = "random" 
end 
+0

這對我很好。我們能否看到'user.rb'和'spec_helper.rb'的任何相關部分? – jordanpg 2012-08-06 19:32:18

+0

這個問題肯定不是用user.rb,因爲我剛剛運行該項目,它創建並刪除了一個完美的用戶。我發佈了spec_helper.rb的更新,恰巧是自動生成的版本 – 2012-08-06 19:45:06

+0

您是否對'user.rb'或'users_controller.rb'進行了任何更改?那將是下一個看的地方。 – jordanpg 2012-08-06 19:54:27

回答

0

它不缺少expect方法 - 失敗的消息說,它缺少nil[]。默認情況下,RSpec只會在規範中向您顯示行,這會導致問題,但有時問題會更深入。

使用命令行上的--backtrace標誌運行規範,查看完整的回溯並查明真實的源。

HTH, David