【问题标题】:rspec test of my controller returns nil (+factory girl)我的控制器的 rspec 测试返回 nil(+工厂女孩)
【发布时间】:2013-08-22 15:06:53
【问题描述】:

我在 Rails 上与 rspec 和 factory girl 一起学习测试,但我无法让它们发挥作用。

我的用户控制器如下所示:

class UsersController < ApplicationController
  def index
    @users = User.all.order(:first_name)
  end
end

和测试:

require 'spec_helper'

describe UsersController do

before(:each) do
    @user1 = FactoryGirl.create(:user, first_name: "B", last_name: "B", uid: "b")
    @user2 = FactoryGirl.create(:user, first_name: "A", last_name: "A", uid: "a")
end

describe "GET index" do     
    it "sets a list of users sorted by first name" do
        get :index
        assigns(:users).should == [@user2, @user1]
    end
end
end

但测试返回以下内容:

UsersController GET index sets a list of users sorted by first name
Failure/Error: assigns(:users).should == [@user2, @user1]
expected: [#<User id: nil, email: nil, first_name: "A", last_name: "A", uid: "a", active: true, admin: false, created_at: nil, updated_at: nil, reset_date: nil>, #<User id: nil, email: nil, first_name: "B", last_name: "B", uid: "b", active: true, admin: false, created_at: nil, updated_at: nil, reset_date: nil>]
got: nil (using ==)
# ./spec/controllers/users_controller_spec.rb:13:in `block (3 levels) in <top (required)>'

你知道我做错了什么吗?

干杯!

这里是“rake 路线”:

      Prefix Verb   URI Pattern                        Controller#Action
        root GET    /                                  meetings#index
    meetings GET    /meetings(.:format)                meetings#index
       login GET    /login(.:format)                   sessions#new
      logout GET    /logout(.:format)                  sessions#destroy
             POST   /auth/:provider/callback(.:format) sessions#create
auth_failure GET    /auth/failure(.:format)            sessions#failure
       users GET    /users(.:format)                   users#index
             POST   /users(.:format)                   users#create
    new_user GET    /users/new(.:format)               users#new
   edit_user GET    /users/:id/edit(.:format)          users#edit
        user GET    /users/:id(.:format)               users#show
             PATCH  /users/:id(.:format)               users#update
             PUT    /users/:id(.:format)               users#update
             DELETE /users/:id(.:format)               users#destroy

【问题讨论】:

  • 请您发布您的用户工厂。
  • 你检查过你的路线吗(例如rake routes的输出)?
  • 确保调用 FactoryGirl.create 实际上在数据库中创建了一条记录。您应该记住,工厂至少应该通过所有验证。
  • 如果您将get :index 更改为controller.index 并且它可以工作,这将确认问题出在您的路由上。
  • 彼得你是对的!这是一个路由问题。 controller.index 使它工作。现在我必须弄清楚我的路由问题。谢谢!

标签: ruby-on-rails rspec controller factory-bot


【解决方案1】:

正如 Jvnill 上面所说,使用 create。另一种选择是在声明它们之后使用@user1.save。

就路线而言,请检查路线文件中的资源。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多