Rails / Rspec-如何在控制器测试中添加模型方法?

时间:2019-07-15 19:14:28

标签: ruby-on-rails rspec

我有一个控制器方法,可以随机返回不同的对象。我该如何对随机化方法进行存根处理,使其始终返回true或false,以便测试响应?

示例控制器:

class TaskController
  def next 
    if(Tasks.assign_random_test?)
      Tasks.next_test
    else 
      Tasks.next_task
    end
  end
end

ActiveRecord模型:

class Tasks << ActiveRecord::Base
  def self.assign_random_test? 
    rand() > 0.899
  end

  def self.next_test
   # ...
  end

  def self.next_task
   # ... 
  end
end

RSpec测试

RSpec.describe TaskController, type :controller do 
  it 'can return a test task' do 
   # force random method to return true here? 
  end
end

1 个答案:

答案 0 :(得分:3)

  

允许(任务)。接收(:assign_random_test?)。并且返回(true)

RSpec.describe TaskController, type :controller do 
  describe '#next' do
    before do
      allow(Tasks).to receive(:assign_random_test?).and_return(true)
    end

    context 'when assign_random_test' do
      it 'should return result' do
        #your test here
      end 
    end

    context 'when not assign_random_test' do
      before do
        allow(Tasks).to receive(:assign_random_test?).and_return(false)
      end
      it 'should return result' do
        #your test here
      end 
    end
  end 
end