4

我对 RSpec 很陌生,显然做错了什么。

具有带索引操作的基本控制器:

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

并对 Index 操作进行默认的 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)>'

将不胜感激任何提示,因为我已经花了一整天的时间。

4

2 回答 2

10

首先,如果您使用,则before_filter :authenticate_user!需要通过该过滤器。

这可以通过使用来完成sign_in some_user

其次,当您分配交易时@transactions = current_user.transactions

并且您希望规范中应该有一些,您将必须创建分配给当前用户的事务FactoryGirl.create(:transaction, user: some_user)

于 2013-02-02T14:59:51.897 回答
0

你能检查一下 get :index to controller.index 是否有效吗?如果是,您必须检查路线

于 2014-05-14T06:50:32.407 回答