yaml 解析时出错。预期<块结束>,但已找到<scalar>



我正在尝试用got-swag测试一个招摇的api(npm包(

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

 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:UsersdvbetsDocumentsWorkspaceReposnode_modulesyaml-jsliberrors.js:70:46)
    at ParserError.MarkedYAMLError [as constructor] (C:UsersdvbetsDocumentsWorkspaceReposnode_modulesyaml-jsliberrors.js:90:45)
    at new ParserError (C:UsersdvbetsDocumentsWorkspaceReposnode_modulesyaml-jslibparser.js:17:48)
    at Loader.__dirname.Parser.Parser.parse_block_mapping_key (C:UsersdvbetsDocumentsWorkspaceReposnode_modulesyaml-jslibparser.js:433:15)
    at Loader.__dirname.Parser.Parser.check_event (C:UsersdvbetsDocumentsWorkspaceReposnode_modulesyaml-jslibparser.js:61:48)
    at Loader.__dirname.Composer.Composer.compose_mapping_node (C:UsersdvbetsDocumentsWorkspaceReposnode_modulesyaml-jslibcomposer.js:248:20)
    at Loader.__dirname.Composer.Composer.compose_node (C:UsersdvbetsDocumentsWorkspaceReposnode_modulesyaml-jslibcomposer.js:160:21)
    at Loader.__dirname.Composer.Composer.compose_sequence_node (C:UsersdvbetsDocumentsWorkspaceReposnode_modulesyaml-jslibcomposer.js:216:30)
    at Loader.__dirname.Composer.Composer.compose_node (C:UsersdvbetsDocumentsWorkspaceReposnode_modulesyaml-jslibcomposer.js:158:21)
    at Loader.__dirname.Composer.Composer.compose_mapping_node (C:UsersdvbetsDocumentsWorkspaceReposnode_modulesyaml-jslibcomposer.js:250:27)

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

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

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

相关:如何在 YAML 中转义指示符(即 : 或 - (

最新更新