您好我正在使用带有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回调。请帮我怎么跳过。
答案 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
方法的内容,以便我们为您提供更好的帮助。