首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >未定义的方法`formats=‘.控制器:类

未定义的方法`formats=‘.控制器:类
EN

Stack Overflow用户
提问于 2015-01-19 23:26:18
回答 1查看 1.6K关注 0票数 2

我正试图用rspec发送一个“删除”请求。问题是,我得到了以下错误:

未定义的管理方法`formats=‘::CountriesController:Class

这是我的代码:

代码语言:javascript
复制
describe 'Admin user deletion button' do
  def sign_in(user)
    user.confirm!
    visit '/login'
    fill_in 'user_email', with: user.email
    fill_in 'user_password', with: user.password
    click_button 'login_submit'
  end

  it 'should display an error' do
      @controller = Admin::UsersController
      @admin = FactoryGirl.create(:admin)

      sign_in @admin
      delete :delete, user_id: -1
    end
end

编辑:这是完整的错误:

1)与现有用户一起管理用户删除按钮应显示错误失败/错误:删除:删除,user_id:-1 NoMethodError:未定义方法'formats=‘for Admin::UsersController:Class #

编辑2:这是控制器代码:

代码语言:javascript
复制
module Admin
# Controller for users admin panel
class UsersController < AdminController
  include UserHelper

  before_action :actual_user

  def users
    @users = User.normals.page(params[:users_page])
    @admins = User.admins.page(params[:admins_page])
  end

  def new
    @user = User.new
    render :new_user
  end

  def create
    user = User.new(user_params)

    if user.save
      flash[:notice] = "L'utilisateur #{user.name} a bien été creé"
    else
      flash[:alert] = "L'utilisateur n'a pas pu être créé"
    end
    redirect_to action: :users
  end

  def edit
    render :edit_user
  end

  def update
    if @user.update(user_params) && @user.confirm!
      flash[:notice] = "L'utilisateur #{@user.name} a bien été mis à jour"
    else
      flash[:alert] = "L'utilisateur #{@user.name} n'a pas pu être mis à jour"
    end
    redirect_to action: :users
  end

  def delete
    name = @user.name

    if @user.destroy
      flash[:notice] = "L'utilisateur #{name} a bien été supprimé"
    else
      flash[:alert] = "L'utilisateur #{name} n'a pas pu être supprimé"
    end
    redirect_to action: :users
  end

  private

  def user_params
    params[:user].delete(:password) if params[:user][:password].blank?
    params.require(:user).permit!
  end

  def actual_user
    @user = User.find(params[:user_id]) if params[:user_id]
  end
end
end
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-02-02 02:33:55

  1. 永远不要卷入亚洲的陆地战争。
  2. 当死亡危在旦夕时,千万不要与西西里人作对。
  3. 不要混淆控制器规范和特性规范。

控制器规范对它们的先决条件做出了假设

您不应该在控制器规范中使用visit。相反,在调用中将请求参数和(必要时)会话数据传递给操作本身。

关于请求失败的原因,请考虑错误消息:

代码语言:javascript
复制
NoMethodError: undefined method 'formats=' for Admin::UsersController:Class

这是因为您重新定义了控制器实例变量,并将其分配给控制器类,而不是控制器实例。相反,不要使用控制器实例变量,而允许RSpec调用实例上的操作。

如果需要进一步证实,请在规范上下文中检查@controller.respond_to?(:formats=)的返回值;在您的版本中,它返回false,但在标准控制器规范(例如,由RSpec生成器创建的控制器规范)中,它将返回true

票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28035288

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档