【问题标题】:yaml Error while parsing. Expected <block end>, but found <scalar>yaml 解析时出错。预期 <block end>,但找到 <scalar>
【发布时间】:2017-10-16 20:13:29
【问题描述】:

我正在尝试使用 got-swag(npm 包)测试一个 swagger api

当我尝试使用 json 架构验证 json 响应时,当单独的 yaml 文件合并为一个 yaml 和 json 文件时,我会收到 parseError。起源是 -validate() 行。 validate() 源自 got-swag 包,但它在底层 jsonschema.validate(data, schema); 依赖项

中失败了
 x-tests:
        - description: Should return array of ferries
          steps:
            - get('/api/get/link/ferries')
            - equal(res.statusCode, 200)
            - ok(res.json.length > 0)
            - validate(res.json,  $ref: '#/definitions/ferry')

这是产生的错误:

           throw new exports.ParserError('while parsing a block mapping', this.marks.slice(-1)[0], "expected <block end>, but found " + token.id, token.start_mark);
        ^
while parsing a block mapping
  on line 29, column 15
expected <block end>, but found <scalar>
  on line 29, column 76
    at ParserError.YAMLError [as constructor] (C:\Users\dvbets\Documents\Workspace\Repos\node_modules\yaml-js\lib\errors.js:70:46)
    at ParserError.MarkedYAMLError [as constructor] (C:\Users\dvbets\Documents\Workspace\Repos\node_modules\yaml-js\lib\errors.js:90:45)
    at new ParserError (C:\Users\dvbets\Documents\Workspace\Repos\node_modules\yaml-js\lib\parser.js:17:48)
    at Loader.__dirname.Parser.Parser.parse_block_mapping_key (C:\Users\dvbets\Documents\Workspace\Repos\node_modules\yaml-js\lib\parser.js:433:15)
    at Loader.__dirname.Parser.Parser.check_event (C:\Users\dvbets\Documents\Workspace\Repos\node_modules\yaml-js\lib\parser.js:61:48)
    at Loader.__dirname.Composer.Composer.compose_mapping_node (C:\Users\dvbets\Documents\Workspace\Repos\node_modules\yaml-js\lib\composer.js:248:20)
    at Loader.__dirname.Composer.Composer.compose_node (C:\Users\dvbets\Documents\Workspace\Repos\node_modules\yaml-js\lib\composer.js:160:21)
    at Loader.__dirname.Composer.Composer.compose_sequence_node (C:\Users\dvbets\Documents\Workspace\Repos\node_modules\yaml-js\lib\composer.js:216:30)
    at Loader.__dirname.Composer.Composer.compose_node (C:\Users\dvbets\Documents\Workspace\Repos\node_modules\yaml-js\lib\composer.js:158:21)
    at Loader.__dirname.Composer.Composer.compose_mapping_node (C:\Users\dvbets\Documents\Workspace\Repos\node_modules\yaml-js\lib\composer.js:250:27)

【问题讨论】:

    标签: javascript json parsing yaml swagger


    【解决方案1】:

    该行需要用引号引起来以转义内部: 字符:

    - "validate(res.json,  $ref: '#/definitions/ferry')"
                               ^
    

    : 是 YAML 中的特殊字符,key: value 对的分隔符。如果不进行转义,该行将被解析为键名 validate(res.json, $ref,值为 '#/definitions/ferry'),并且解析器在结束引号后的 ) 上阻塞。

    相关:How to escape indicator characters (i.e. : or - ) in YAML

    【讨论】:

      猜你喜欢
      • 2019-04-26
      • 2019-09-30
      • 2020-04-25
      • 2021-09-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-02-04
      • 1970-01-01
      相关资源
      最近更新 更多