rspec 测试使用 rails 应用程序数据库中整个 table 的虚拟数据
rspec test that uses dummy data from an entire table in rails app database
我想编写一个 rspec 测试,它使用 MyModel.all
(即模型的所有记录)并用它做一些事情,returns 结果
是否可以从 rspec 中生成新数据库 table(即模型)?然后在测试结束时销毁它?这被认为是好的做法吗(理论上,如果从事该项目的开发人员巧合地制作了同名的 table 并且它可能会被测试丢弃)。还是这被认为不太可能在测试中生成随机命名的 table?
注意:测试必须提取模型中的所有记录,因此最好在测试中简单地生成一个(非常小的一个),而不是使用实际的 table,它可能很大并且不必要地减慢测试速度
我尝试测试的方法是
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
这是一个简单的解决方案
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
另请注意:
- 你的 rspec 测试将使用测试数据库,它与你的开发数据库的结构完全相同,但它开始时是空的(因此你必须向它添加一些数据)
- 您可以非常轻松地将数据放入测试数据库,就像您将数据放入开发(或生产)数据库中一样
- 请注意,您在
spec.rb
文件中对测试数据库所做的任何操作都将在测试完成后回滚
我想编写一个 rspec 测试,它使用 MyModel.all
(即模型的所有记录)并用它做一些事情,returns 结果
是否可以从 rspec 中生成新数据库 table(即模型)?然后在测试结束时销毁它?这被认为是好的做法吗(理论上,如果从事该项目的开发人员巧合地制作了同名的 table 并且它可能会被测试丢弃)。还是这被认为不太可能在测试中生成随机命名的 table?
注意:测试必须提取模型中的所有记录,因此最好在测试中简单地生成一个(非常小的一个),而不是使用实际的 table,它可能很大并且不必要地减慢测试速度
我尝试测试的方法是
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
这是一个简单的解决方案
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
另请注意:
- 你的 rspec 测试将使用测试数据库,它与你的开发数据库的结构完全相同,但它开始时是空的(因此你必须向它添加一些数据)
- 您可以非常轻松地将数据放入测试数据库,就像您将数据放入开发(或生产)数据库中一样
- 请注意,您在
spec.rb
文件中对测试数据库所做的任何操作都将在测试完成后回滚