如何在RSpec中存根?

时间:2017-12-22 12:34:55

标签: ruby-on-rails 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语句。

出了什么问题?在这种情况下我该怎么办? 任何想法都受到欢迎。

1 个答案:

答案 0 :(得分:1)

allow_any_instance_of应该用于公司类的实例,但是这里会在类本身上调用find_by

尝试这个(在执行测试主题之前,即请求):

allow(Company).to receive(:find_by) { nil }