2014-08-28 74 views
-1

测试失败轨4.0.3 rspec的3.0.2未定义的方法“sign_in”错误

describe "forbidden attributes", type: :request do 

    # let(:user) { FactoryGirl.create(:user) } 

     let(:params) do 

     { user: { zero_cost: true, password: user.password, password_confirmation: user.password } } 

     end 

     before do 

     sign_in user, no_capybara: true 

     patch user_path(user), params 

     end 

     specify { expect(user.reload).not_to be_zero_cost } 

    end 

我github上的链接是here为完整的代码

这是以前的管理员布尔运行表列,但我把它切换到另一列,看看测试是否仍然失败,同样的错误。

用户控制器

class UsersController < ApplicationController 

    before_action :signed_in_user, only: [:index, :edit, :update, :destroy] 

    before_action :correct_user, only: [:edit, :update] 

    before_action :admin_user, only: :destroy 

    def index 

    @users = User.paginate(page: params[:page]) 

    end 

    def show 

    @user = User.find(params[:id]) 

    end 

    def new 

    @user = User.new 

    end 

    def create 

    @user = User.new(user_params) 

    if @user.save 

     sign_in @user 

     flash[:success] = "Welcome to the Sample!" 

     redirect_to @user 

    else 

     render 'new' 

    end 

    end 

    def edit 
    end 

    def update 

    if @user.update_attributes(user_params) 

     flash[:success] ="Profile updated" 

     redirect_to @user 

    else 

     render 'edit' 

    end 

    end 

    def destroy 

    User.find(params[:id]).destroy 

    flash[:success] = "User deleted." 

    redirect_to users_url 

    end 

    private 

    def user_params 

     params.require(:user).permit(:name, :email, :password, :password_confirmation) 

    end 

    # before filters 

    def signed_in_user 

    unless signed_in? 

     store_location 

     redirect_to signin_url, notice: "Please sign in." 

    end 

    end 

    def correct_user 

    @user = User.find(params[:id]) 

    redirect_to(root_url) unless current_user?(@user) 

    end 

    def admin_user 

    redirect_to(root_url) unless current_user.admin? 

    end 

end 
+0

如果用控制器生成测试,则更好:rails g controller用户索引show new create update destroy – Exsemt 2014-08-28 08:42:16

回答

1

删除sign_in从测试:

describe "forbidden attributes" do 
    let(:user) { FactoryGirl.create(:user) } 

    before do 
    patch :update, id: user.id, user: { zero_cost: true, password: user.password, password_confirmation: user.password } 
    end 

    specify { 
    expect(assigns(:user).zero_cost).to be_true 
    expect(response).to redirect_to(user_path(assigns(:user).id)) 
    } 
end 
+0

用户页索引禁止属性非编辑 失败/错误:修补程序:更新,ID:用户.id,用户:{zero_cost:true,密码:user.password,password_confirmation:user.password} NoMethodError: 未定义的方法'patch' # #./spec/features/user_pages_spec.rb:111:in ' above产生这个错误 – Conor 2014-08-30 15:45:34

0

轨道教程最初将此测试放入描述编辑部分,但here(解决方案18305598),建议将其与“用户”测试结合使用

块之前内去除所述sign_in用户正确

这是校正后的工作测试

describe "forbidden attributes", type: :request do 

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

     let(:params) do 

     { user: { admin: true, password: user.password, password_confirmation: user.password } } 

     end 

     before do 

     patch user_path(user), params 

     end 

     specify { expect(user.reload).not_to be_admin } 

    end 

在脚本的顶部的代码块必须运行

before(:each) do 
    sign_in user 
    visit users_path 
end 

意味着我不能用这个命令只运行单个测试

bundle exec rspec spec/features/user_pages_spec.rb -e "forbidden attributes" 

b因为它需要用户登录

相关问题