我想要写一个RSpec测试使用MyModel.all
(即,用于一个模型中的所有记录),并做一些事情与它返回一个结果
是否可以从rspec中生成新的数据库表(即模型)?然后在测试结束摧毁它?这是否被认为是一种好习惯(理论上,如果一个从事该项目的开发人员巧合地制作了一个同名表,并且可能被测试删除)。还是这样认为不太可能,可以在测试中生成随机命名的表?
注意:测试必须提取模型中的所有记录,因此,为什么在测试内部简单地生成一个(很小的)记录而不是使用实际的表会是个不错的选择,其可以是大的并且不必要地减慢测试
我要测试的方法是
def my_method(model_name)
the_table = eval(model_name).all
# does some things
end
该方法的关键特征是,它接受的型号名称(并检索所有记录为模型的内的方法)
该测试是沿
的线it "ensures something" do
# tests
expect(result).to eq(true)
end
答案 0 :(得分:0)
这是一个简单的解决方案
Rails自动创建具有与dev / prod相同架构的测试数据库。因此,您要做的就是在运行测试之前添加一些数据
例如
# Add some records
@model_name = Model_name.new(name: "John", email: "john@gmail.com")
@model_name.save
# run your test
it "ensures something" do
# tests
expect(result).to eq(true)
end
还请注意:
spec.rb
文件中的测试数据库所做的任何操作都会回滚