Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/57.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails Rspec中的存根记录创建_Ruby On Rails_Ruby_Activerecord_Rspec_Rspec Rails - Fatal编程技术网

Ruby on rails Rspec中的存根记录创建

Ruby on rails Rspec中的存根记录创建,ruby-on-rails,ruby,activerecord,rspec,rspec-rails,Ruby On Rails,Ruby,Activerecord,Rspec,Rspec Rails,我有一个builder类,它应该创建新记录,比如: ObjectBuilder creates Object Object它是一个继承的类 我想在Rspec中测试是否创建了特定记录 但是,只在创建特定记录时进行测试就足够了,而不需要数据库调用。那么我怎样才能用存根AR对象来检查这个呢 对于可能的答案,我无法将NullDB集成到我的项目中,并且我不会在Object中创建自定义方法,该方法将负责创建记录,并且很容易存根。我想依赖于ActiveRecord接口。我认为您需要准确地决定您要在这里测试什

我有一个builder类,它应该创建新记录,比如:

ObjectBuilder creates Object
Object
它是一个继承的类

我想在
Rspec
中测试是否创建了特定记录

但是,只在创建特定记录时进行测试就足够了,
而不需要数据库调用
。那么我怎样才能用存根AR对象来检查这个呢


对于可能的答案,我无法将
NullDB
集成到我的项目中,并且我不会在
Object
中创建自定义方法,该方法将负责创建记录,并且很容易存根。我想依赖于
ActiveRecord
接口。

我认为您需要准确地决定您要在这里测试什么。如果您正在测试ActiveRecord是否工作,那么您就走错了路。ActiveRecord本身经过了彻底的测试,您在应用程序中添加的任何进一步测试都有些多余

请在此处查看ActiveRecord测试、它们是如何工作的、涵盖了哪些内容等:

我认为您可能想测试的是,当您在应用程序中调用
@object.save
时,您的对象是否能够被保存。如果是这种情况,那么只需调用
#valid?
方法,您就可以轻松地进行测试,而无需真正保存对象。如果对象无效,ActiveRecord将不会保存该对象

这样就足够了:

require 'spec_helper'

describe Object do
  before(:each) do
    object = Object.new(attr1: 'required')
  end

  it "is valid with required attributes" do        
    expect(object).to be_valid
  end

  it "is not valid without an attr1" do
    object.attr1 = nil
    expect(object).not_to be_valid
  end
end
您可以通过将
rspec-collection\u matchers
gem添加到您的项目中并执行以下操作来更全面地测试验证:

it "is not valid without an attr1" do
  object.attr1 = nil
  expect(object).to have(1).errors_on(:attr1)
end

我没有试过任何具体的方法。我拒绝了上述两种方法。这似乎是一个共同的需要,所以我认为有人已经遇到了。没有共同的需要,因为:1。在rails 2中,不使用生成器模式创建对象。您只需在模型类上存根
create
。请使用有效的示例代码更新您的问题