代码之家  ›  专栏  ›  技术社区  ›  AlbertMunichMar

用rspec测试ruby对象到json对象的转换

  •  0
  • AlbertMunichMar  · 技术社区  · 7 年前

    我有一个物体有四种属性;

    Object
    attr1, attr2, attr3, attr4
    

    出于数据科学的原因,我需要将此信息发送到另一个应用程序。我创建了一个进行映射的方法:

    def convert_for_elastic_search
        {
            name_attr1: @object.attr1,
            name_attr2: @object.attr2,
            name_attr3: @object.attr3
        }
    end
    

    如何使用rspec测试此方法?我不能嘲笑和我不想硬编码的价值观,因为他们来自工厂机器人。

    哪种方法更好?

    0 回复  |  直到 7 年前
        1
  •  0
  •   David Wolfe    7 年前

    最好是以某种方式获得 @object 是的。如果是使用create()调用创建的,则可以覆盖工厂中的属性。

    如果不能直接设置值,则可以创建验证“映射”值是否与源值匹配的期望值。

    object { FactoryBot.create(:object) }
    subject { FactoryBot.create(:mapper, object: object) }
    
    result = subject.convert_for_elastic_search
    expect(result[:name_attr1]).to eq object.attr1
    expect(result[:name_attr2]).to eq object.attr2
    expect(result[:name_attr3]).to eq object.attr3
    

    当然,如果您要设置如上所示的规范,那么设置硬编码值就很简单了。即 FactoryBot.create(:object, attr1: 'val1') 是的。在这种情况下,你可以期待“val1”。

    如果 object 不可访问,如上图所示,那么您需要一种方法来获取对它的引用,也许mapper(subject)以某种方式公开了这一点。

    如果你真的搞不懂 @对象 然后,也许仅仅测试值是否存在就足以验证映射过程。