如何在RSpec中存根?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何在RSpec中存根?相关的知识,希望对你有一定的参考价值。
我无法弄清楚为什么存根不能在这个源中创建。我正在尝试测试if语句中的逻辑。 if user.nil? || company.nil?
是条件。为此,我制定了如下定义。
def introduce
accountant_request = AccountantRequest.with_introduce_request_status(:requested).find(params[:id])
company = Company.find_by(id: accountant_request.company_id)
user = User.find_by(id: company.try(:primary_user_id))
if user.nil? || company.nil?
redirect_to admin_accountant_requests_path, alert: 'There is no company or user' and return
end
这是规格。我的期望是Company.find_by(...)返回nil。
shared_examples 'post #introduce' do
subject(:response) { post 'introduce', params_for_introduce }
context 'error by user.nil? || company.nil?' do
it 'fail' do
allow_any_instance_of(Company).to receive(:find_by).and_return(nil)
expect(response).to have_http_status 302
expect(response).to redirect_to introduce_error_redirect_path2
end
end
不幸的是,company = Company.find_by(id: accountant_request.company_id)
返回现有记录不是零。所以我无法检查内部if语句。
怎么了?在这种情况下我该怎么办?欢迎任何想法。
答案
allow_any_instance_of
应该用于Company类的实例,但是在这里调用find_by
试试这个(在执行测试主题之前,即请求):
allow(Company).to receive(:find_by) { nil }
以上是关于如何在RSpec中存根?的主要内容,如果未能解决你的问题,请参考以下文章