1

サブコントローラーのコントローラー仕様を書き込もうとしています。この場合は Admin::UsersController です。

CRUD アクションの基本セットがあります。

私のusers_controller_spec.rb

describe Admin::CarriersController do
  before(:each) do
    sign_in FactoryGirl.create(:admin)
  end

  it "should have a current_user" do
    subject.current_user.should_not be_nil
  end

  describe "GET 'index'" do
    it "assigns all users as @users" do
      user = create(:user)
      get :index
      assigns(:users).should eq [user]
    end
    it "renders the index view" do
      get :index
      expect(response).to render_template :index
    end
  end
end

今私が直面している問題は、インデックスアクションです。私のコントローラーは機能し、単純な @users = User.all です

複雑なのは、私の User テーブルが STI であることです。

class User < ActiveRecord::Base
end
class Client < User
end
class Seller < User
end

私の工場

FactoryGirl.define do
  factory :user do
    name { Faker::Company.name }
    sequence(:email) {|n| "test#{n}@test.com"}
    password "password"
    password_confirmation {|instance| instance.password }
    type "Seller"

    factory :admin do
      type "Admin"
    end

    factory :seller do
      type "Seller"
    end

    factory :client do
      type "Client"
    end
  end
end

RSpec が私の assigns(:users) 期待値のクラス名と一致する問題を抱えているため、明らかに eq メソッドは機能していません。私の正確なエラーは次のとおりです。

1) Admin::UsersController GET 'index' assigns all users as @users
     Failure/Error: assigns(:users).should eq user
       expected #<ActiveRecord::Relation [#<Client id: 1282, name: "Marks-Kozey", type: "Client"...]> to eq #<User id: 1282, name: "Marks-Kozey", type: "Client"...

私の問題は私の工場ですか?または私は間違ってテストしています。STI をテストするのはこれが初めてなので、助けていただければ幸いです。

4

1 に答える 1