代码之家  ›  专栏  ›  技术社区  ›  stevec Zxeenu

使用Rails应用程序数据库中整个表中的虚拟数据的rspec测试

  •  0
  • stevec Zxeenu  · 技术社区  · 6 年前

    我想编写一个使用 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
    
    1 回复  |  直到 6 年前
        1
  •  0
  •   stevec Zxeenu    6 年前

    这是一个简单的解决方案

    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 测试完成后将回滚文件