首页 > 解决方案 > ScannerError:此处不允许映射值

问题描述

使用 Tavern 并尝试针对此 yaml 运行 tavern-ci:

test_name: tavern poc

  - name: list
    request:
      url: https://xxx.xxx.xxx.us/api/v3/institutions/
      method: GET
    response:
      status_code: 200
      headers:
        content-type: application/json
      save:
        body:
          content: content

我得到 E ScannerError: mapping values are not allowed here E in "/Users/xxx/xxx/xxx/test_poc.tavern.yaml", line 3, column 9

已经尝试了这里介绍的许多解决方案(其中大部分是“在冒号后放置一个空格”),但并不高兴。

Yamllint 给出了同样的错误......

标签: yamlpyyamltavern

解决方案


在 YAML 文档的根目录中,您有一个带有 key 的映射,test_name而 value 是一个普通 scalar 的开头tavern ....

解析器需要一个键,缩进与第一行相同,在第二行或第一行的普通标量的延续。第二行是空的,所以它继续与第三行相同的期望。在那里它找到了一个-比 的开头更缩进的test_name,所以它不是键,而是普通标量的一部分。然后它还找到name从第一行开始的普通标量的一部分,然后是:(冒号+空格)。

但是,在纯标量中不允许使用冒号+空格,因为这会导致另一个键值对的开始存在潜在的歧义。

不太可能的解决方案是 tavern在 YAML 文档的前后加上双引号。

更有可能的是,您应该包含一个以 this 开头的结构为其- name: list值的键。例如:

test_name: tavern poc

stages:
  - name: list
    request:

(从您从谷歌搜索“tavern yaml”获得的第二个条目开始)


推荐阅读