2012-08-06 83 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