我对RSpec很新,显然做错了。
使用Index action:
class TransactionsController < ApplicationController
before_filter :authenticate_user!
def index
@transactions = current_user.transactions
respond_to do |format|
format.html { render layout: "items" } # index.html.erb
format.json { render json: @transactions }
end
end
end
并为索引操作设置默认的RSpec测试。
require 'spec_helper'
describe TransactionsController do
describe "GET index" do
it "assigns all transactions as @transactions" do
transaction = FactoryGirl.create(:transaction)
get :index
assigns(:transactions).should eq([transaction])
end
end
end
所以一切正常,除了行assigns(:transactions).should eq([transaction])
返回nil,所以我得到了这个错误:
Failure/Error: assigns(:transactions).should eq([transaction])
expected: [#<Transaction id: 1, user_id: 1, text: "some transaction", date: "2013-02-02", money: #<BigDecimal:b8a8e90,'0.999E1',18(18)>, created_at: "2013-02-02 09:17:42", updated_at: "2013-02-02 09:17:42">]
got: nil
(compared using ==)
# ./spec/controllers/transactions_controller_spec.rb:17:in `block (3 levels) in <top (required)>'
感谢任何提示,因为我花了一整天的时间。
答案 0 :(得分:10)
首先,如果您使用before_filter :authenticate_user!
,则需要传递该过滤器。
可以使用sign_in some_user
其次,当您分配交易@transactions = current_user.transactions
并且您希望规范中应该有一些,您必须创建分配给当前用户的事务FactoryGirl.create(:transaction, user: some_user)
答案 1 :(得分:0)
你能检查一下get:controller到controller.index的工作原理吗?如果是,您必须检查路线