如何在Rspec中跳过before_create回调

时间:2018-03-24 09:49:08

标签: ruby-on-rails rspec callback

您好我正在使用带有ruby-2.2.5和rails 5的Rails应用程序我正在使用rspec来测试我的控制器。用户模型before_create :create_token中有一个回调我想跳过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

我想跳过create_token回调。请帮我怎么跳过。

1 个答案:

答案 0 :(得分:3)

快速解决方案是使用RSpec#allow_any_instance_of方法为所有类存根create_token

before do
  allow_any_instance_of(User).to receive(:create_token)
  @user = User.create!(fullname: 'saddam husain', email: 'saddam@gmail.com', ...)
end

不推荐这样做(reference;请阅读完整部分),您可能需要跳过第三方代码或create_token方法内的服务集成。所以你应该模仿这个服务而不是create_token方法。以下是有关如何执行此操作的示例:https://stackoverflow.com/a/19281316/1042324

告诉我们create_token方法的内容,以便我们为您提供更好的帮助。