使用 FactoryGirl 构建 json 存根

Und*_*ker 5 ruby rspec ruby-on-rails ruby-on-rails-4 factory-bot

我尝试json使用工厂构建一个,但是当我尝试build它时它是空的。

下面是Factory课。

require 'faker'

FactoryGirl.define do 
    factory :account do |f|
        f.name {Faker::Name.name}
        f.description {Faker::Name.description}     
    end

    factory :accjson, class:Hash do
        "@type" "accountResource"
        "createdAt" "2014-08-07T14:31:58"
        "createdBy" "2"        
        "disabled"  "false"        
    end 
end
Run Code Online (Sandbox Code Playgroud)

以下是我正在尝试构建的方式。

hashed_response = FactoryGirl.build(:accjson)        
expect(account.to_json).to eq(hashed_response.to_json);
Run Code Online (Sandbox Code Playgroud)

但我的hashed_response似乎总是空的object

Bro*_*tse 5

使用 FactoryGirl 创建 json 就像使用航天飞机去剥菠萝一样。在你足够努力之后你会做到这一点,但这不是航天飞机的目的。

如果您在测试中重用此哈希结构,请将其存储在 yaml 文件中并创建一些辅助方法来读取它(您可以将它们放在 spec/spec_helpers 中)。

您的代码不起作用的原因:

FactoryGirl 正在使用method_missing魔法来分配值。在您的代码中,您没有尝试执行任何方法,因为您只是列出字符串,因此method_missing不会触发魔法。

使用 FactoryGirl 执行此操作的方法(阅读最上面的段落!):

为了完整起见,有一种方法可以使用 FG 做到这一点,但不是很漂亮:

factory :accjson, class: OpenStruct do
  send :'@type', "accountResource"
  createdAt "2014-08-07T14:31:58"
  createdBy "2"        
  disabled  "false"        
end

hashed_response = FactoryGirl.build(:accjson).marshal_dump.to_json
Run Code Online (Sandbox Code Playgroud)