【问题标题】:Ruby 2.2.5 error on hash mockup哈希模型上的 Ruby 2.2.5 错误
【发布时间】:2017-04-13 03:43:57
【问题描述】:

我正在尝试模拟一个在顶层仅使用 1 或 2 个已知键名动态生成的哈希,因此我可以使用它进行测试,以期将其转换为嵌套的 JSON。这就是我正在使用的:

ruby.exe -v

ruby 2.2.5p319 (2016-04-26 revision 54774) [i386-mingw32]

虽然我遇到了解析问题,但我不确定为什么,或者我到底做错了什么。我真的不知道我的限制是什么,但这似乎是一个基本的格式问题。但是,在过去的 10 分钟里我一直对它视而不见,所以也许有一些潜在的问题?到目前为止,这是我的整个应用程序:

tcm = { \
        :tc => \
        { \
            :tests => \
            { \
                :alpha_tests => \
                { \
                    :passing_tests => {}, \
                    :failing_tests => \
                    { \
                        :alpha_test_1 => {:name => "alpha_test_1", :result => "FAILED"}, \
                        :alpha_test_2 => {:name => "alpha_test_2", :result => "FAILED"} \
                    } \
                }, \
                :beta_tests => \
                { \
                    :passing_tests => \
                    { \
                        :beta_test_1 => {:name => "beta_test_1", :result => "PASSED"} \
                    }, \
                    :failing_tests => \
                    { \
                        :beta_test_2 => {:name => "beta_test_2", :result => "FAILED"} \
                    } \
                } \
            }, \
            { \
                :test_session => 1293823 \
            } \
        } \
    }

puts tcm

【问题讨论】:

    标签: json ruby parsing mocking ruby-hash


    【解决方案1】:

    我看到的问题是你漏掉了一个键:

    { \
      :test_session => 1293823 \
    } \
    

    应该是

    :some_key => { \
      :test_session => 1293823 \
    } \
    

    这也是奇怪的格式。更好的是

    tcm = {
      tc: {
        tests: {
          alpha_tests: {
            passing_tests: {},
            failing_tests: {
              alpha_test_1: { name: 'alpha_test_1', result: 'FAILED' },
              alpha_test_2: { name: 'alpha_test_2', result: 'FAILED' }
            }
          },
          beta_tests: {
            passing_tests: {
              beta_test_1: { name: 'beta_test_1', result: 'PASSED' }
            },
            failing_tests: {
              beta_test_2: { name: 'beta_test_2', result: 'FAILED' }
            }
          }
        },
        key_to_fix: {
          test_session: 1_293_823
        }
      }
    }
    
    puts tcm
    

    【讨论】:

      【解决方案2】:

      如果您删除 alpha_testsbeta_tests 部分,您的哈希值如下所示:

      tcm = { \
              :tc => \
              { \
                  :tests => \
                  { \
                  }, \
                  { \
                      :test_session => 1293823 \
                  } \
              } \
          }
      

      在这种情况下,:tests => {}, {} 不是有效的 Ruby 哈希。你可以使用数组:tests => [ {}, {} ]

      顺便说一句,所有这些反斜杠都不是必需的,您也可以使用新的 ruby​​ 哈希样式({test_session: 1293823} 而不是 {:test_session => 129823})更简洁地编写此代码,因此您的代码可能如下所示:

      tcm = {
              tc: { 
                    tests: [ 
                             { ... },
                             {
                                test_session: 1293823
                             }
                           ]
                  }   
            }
      

      【讨论】:

      • 多么宽慰啊!我遇到了与\n 相关的错误,所以我是一个红宝石新手,要格外小心。
      猜你喜欢
      • 2011-04-17
      • 1970-01-01
      • 2012-05-10
      • 2014-03-03
      • 2020-08-31
      • 2011-07-01
      • 1970-01-01
      • 2019-07-22
      • 1970-01-01
      相关资源
      最近更新 更多