【发布时间】: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