2014-09-02 7 views
2

Je vais avoir un contrôleur de test avec un appareil, mais il échoue toujours parce attribue toujours revenir à zéro, s'il vous plaît aider à trouver où le problème est, merci un million!Test Rspec échec parce que attribue toujours

posts_controller_spec.rb:

RSpec.describe PostsController, :type => :controller do 
    describe "with valid session" do 
     describe "GET index" do 
     it "assigns all posts as @posts" do 
      sign_in :admin, @user 
      post = create(:post) 
      get :index, {} 
      expect(assigns(:posts)).to eq([post]) 
     end 
     end 
    end 
    ... 
end 

posts_controller.rb

class PostsController < ApplicationController 

    before_action :authenticate_user! 
    before_action :set_post, only: [:show, :edit, :update, :destroy] 

    # GET /posts 
    # GET /posts.json 
    def index 
    @posts = Post.all 
    end 
    ... 
end 

J'ai inclus concevoir des aides de test dans spec/rails_helper.rb

config.include Devise::TestHelpers, type: :controller 

Dans mon cas, après est limité par admin, pas sûr si cela fait la différence (le test fonctionnel ne passe pas par les routes?), donc je viens ici routes.rb inclus mon

routes.rb:

Rails.application.routes.draw do 
    root to: 'home#index' 
    get 'admin', to: 'admin#index' 
    devise_for :users 
    scope '/admin' do 
    resources :posts 
    end 
end 

Et enfin, la sortie de rspec:

1) PostsController with valid session GET index assigns all posts as @posts 
    Failure/Error: expect(assigns(:posts)).to eq([post]) 

    expected: [#<Post id: 57, title: "MyText", body: "MyText", image_url: "MyString", created_at: "2014-09-02 14:36:01", updated_at: "2014-09-02 14:36:01", user_id: 1>] 
     got: nil 

    (compared using ==) 
# ./spec/controllers/posts_controller_spec.rb:53:in `block (4 levels) in <top (required)>' 

J'ai lu ce fil rspec test of my controller returns nil (+factory girl), et suivi les suggestion de changer get :index en controller.index. La suggestion est que si cela passe le test, alors c'est un problème de routage. Il fait passer le test, mais je ne sais toujours pas où le problème de routage est, et pourquoi le get :index ne fonctionne pas ...

Répondre

1

Il est juste une petite erreur: créer un utilisateur avant d'utiliser concevoir sign_in

RSpec.describe PostsController, :type => :controller do 

    describe "with valid session" do 

    let (:user) { create(:user) } 

     describe "GET index" do 
     it "assigns all posts as @posts" do 
      sign_in user 
      post = create(:post) 
      get :index, {} 
      expect(assigns(:posts)).to eq([post]) 
     end 
     ... 
     end 
    end 
end