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 ...