aws*_*sid 1 rspec ruby-on-rails 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
Run Code Online (Sandbox Code Playgroud)
我想跳过 create_token 回调。请帮我如何跳过。
一个快速的解决方案是使用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
Run Code Online (Sandbox Code Playgroud)
不推荐这样做(参考;请阅读完整部分),您可能需要跳过第三方代码或服务集成create_token方法。所以你应该模拟这个服务而不是create_token方法。以下是有关如何执行此操作的示例:https : //stackoverflow.com/a/19281316/1042324。
让我们知道您的create_token方法的内容,以便我们更好地帮助您。
| 归档时间: |
|
| 查看次数: |
1099 次 |
| 最近记录: |