单元测试:如何测试Rails迁移是否被调用?

时间:2019-07-30 06:09:31

标签: ruby-on-rails ruby rspec

我有一个运行Rails迁移的方法。 (RAILS应用程序安装自动化的一部分)。

我想测试此方法是否调用rails迁移。我不想检查运行迁移的结果,因为那会测试Rails迁移。对该方法进行单元测试意味着我想检查我的方法是否依次称为Rails Migration。

如何在rspec中对该方法进行单元测试?

def run_migrations
  system('bin/rails db:migrate RAILS_ENV=development')
end

2 个答案:

答案 0 :(得分:4)

我将对该调用进行存根,并检查该存根是否被调用。

before do
  allow(Kernel).to receive(:system).and_return(true)
end

it 'runs migrations' do
  instance.run_migrations # or however you trigger such that method to be called

  expect(Kernel).to have_received(:system).with('bin/rails db:migrate RAILS_ENV=development').once
end

答案 1 :(得分:0)

system('bin/rails db:migrate RAILS_ENV=development')在有效时返回true。因此expect(run_migrations).to eq true就足够了。