1

我有一堆序列化器。現在我想將JSON轉換回原始對象進行測試。我沒有看到用ActiveModel :: Serializer做到這一點的方法。看起來好像曾經是一個不贊成使用的from_json方法。你應該如何做到這一點?如何解析json從ActiveModel :: Serializer回到對象

基本上我要測試的輪跳閘這樣的:

json = WidgetSerializer.new(@widget).to_json 
testw = Widget.new 
testw.from_json(json) #from_json doesn't exist in ActiveModel::Serializers 
@widget.should == testw 

但在模型中的「from_json」方法不正確地從串行器,因爲它不是預期的格式讀取JSON

回答

0

我能想到的最好的使用任一Widget.find()或Widget.find_by(),這取決於你傳遞給您的序列化的屬性(特別是如果其中一人是一個獨特的屬性)

例如如果你的序列化程序包含id(簡單的st在你的情況下):

json = WidgetSerializer.new(@widget).to_json 
    target_id = JSON.parse(json)[:id] 
    test_widget = Widget.find(target_id) 
    @widget.should == test_widget 
+0

不幸的是,它會從數據庫中獲取對象,而不是json,這會打敗單元測試的目的。 (我沒有明確地說它的單元測試,但「.should ==」是一個提示) – nont 2015-09-13 02:53:45

+0

當然,它從數據庫中獲取它,否則它怎麼會是==?即使您的from_json方法返回具有完全相同屬性的新Widget,「id」和「created_at」值也會不同。 (我意識到你要求進行單元測試,但是我不太明白你正在測試什麼 - 你還沒有忘記在串行器中包含所有屬性?) – Matthieu 2015-09-14 06:45:00

+0

是的,我想測試序列化器的工作原理。它是一個帶有嵌套子對象的複雜對象。 – nont 2015-09-15 00:39:48