Ruby on rails 如何在Rspec中创建回调之前跳过

Ruby on rails 如何在Rspec中创建回调之前跳过,ruby-on-rails,rspec,callback,Ruby On Rails,Rspec,Callback,您好,我正在使用一个带有ruby-2.2.5和Rails 5的Rails应用程序。我正在使用rspec测试我的控制器。在创建:创建令牌之前,在用户模型中有一个回调我想跳过rspec中的这个回调 spec/controllers/check_token_controller_spec.rb # frozen_string_literal: true require 'rails_helper' describe CheckTokenController do before do

您好,我正在使用一个带有ruby-2.2.5和Rails 5的Rails应用程序。我正在使用rspec测试我的控制器。在创建:创建令牌之前,在用户模型
中有一个回调
我想跳过rspec中的这个回调

spec/controllers/check_token_controller_spec.rb

# frozen_string_literal: true

require 'rails_helper'

describe CheckTokenController do
  before do
    @user = User.create!(fullname: 'saddam husain',
                         email: 'saddam@gmail.com',
                         password: 'pass',
                         password_confirmation: 'pass',token: 'xyz')
  end

  describe 'POST create' do 
    subject { post :create, params: params }

    context 'when credentials are valid' do
      let(:params) do
        { data: { attributes: { username: 'saddam@gmail.com', token: 'xyz' } } }
      end

      it { is_expected.to have_http_status(200) }
    end

    context 'when credentials are invalid' do
      let(:params) do
        { data: { attributes: { username: 'saddam@gmail.com', token: '' } } }
      end

      it { is_expected.to have_http_status(401) }
    end
  end
end

我想跳过创建令牌回调。请帮助我如何跳过。

快速解决方案是使用方法为所有类存根
创建\u令牌

before do
  allow_any_instance_of(User).to receive(:create_token)
  @user = User.create!(fullname: 'saddam husain', email: 'saddam@gmail.com', ...)
end
不建议这样做(请阅读完整部分),您可能需要跳过第三方代码或
create_token
方法中的服务集成。因此,您应该模拟此服务,而不是
create\u-token
方法。以下是有关如何执行此操作的示例:


让我们知道您的
create\u token
方法的内容,以便我们能更好地帮助您。

一个快速解决方案是使用该方法为所有类存根
create\u token

before do
  allow_any_instance_of(User).to receive(:create_token)
  @user = User.create!(fullname: 'saddam husain', email: 'saddam@gmail.com', ...)
end
不建议这样做(请阅读完整部分),您可能需要跳过第三方代码或
create_token
方法中的服务集成。因此,您应该模拟此服务,而不是
create\u-token
方法。以下是有关如何执行此操作的示例:

让我们知道您的
create_token
方法的内容,以便我们能更好地帮助您。

问题应该是“为什么要这样做?”问题应该是“为什么要这样做?”