Node.js 如何在dredd.yml文件中设置dredd测试的环境变量?

Node.js 如何在dredd.yml文件中设置dredd测试的环境变量?,node.js,yaml,circleci,apiblueprint,dredd,Node.js,Yaml,Circleci,Apiblueprint,Dredd,我正在尝试使用和运行一些api调用来测试一个站点。我想在circleCI上运行测试,因为在同一个地方运行Selenium测试。每个事务都需要附带两个令牌,它们在标题中设置为cookie。理想情况下,这些将在dredd.yml文件中设置。在本地计算机上运行时,如果我用实际值替换ACCESS\u-TOKEN和REFRESH\u-TOKEN,测试将按预期运行 circle.yml: test: override: - dredd dredd.yml头文件 header

我正在尝试使用和运行一些api调用来测试一个站点。我想在circleCI上运行测试,因为在同一个地方运行Selenium测试。每个事务都需要附带两个令牌,它们在标题中设置为cookie。理想情况下,这些将在dredd.yml文件中设置。在本地计算机上运行时,如果我用实际值替换
ACCESS\u-TOKEN
REFRESH\u-TOKEN
,测试将按预期运行

circle.yml:

test:
    override:
            - dredd
dredd.yml头文件

header: ['Cookie: access_token=ACCESS_TOKEN; refresh_token=REFRESH_TOKEN']
其中ACCESS_标记和REFRESH_标记被circleCI的环境变量中设置的实际值替换。我也尝试过:
access\u-token=$[access\u-token]
access\u-token=$[“access\u-token”]
access\u-token=$access\u-token
。在第一次api调用的头中,这些都没有被替换

标题看起来像:
{“Content Type”:“application/json;charset=utf-8”,“User-Agent”:“Dredd/1.4.0(Darwin 14.5.0;x64)”,“Cookie”:“access\u token=$access\u token;refresh\u token=$refresh\u token”}


我是yaml文件的新手,所以我可能缺少一些基本的东西,但我确实搜索了一段时间。hooks文件是用node.js编写的,因此我认为ruby/rails的帮助在这里没有用处。如果我遗漏了问题中的任何内容,请毫不犹豫地告诉我。

YAML是一种数据表示语言,而不是模板语言(或者模板处理器)。虽然单个程序可能支持加载环境变量或配置中指定的其他参数,但YAML解析器(可能,除非它是自定义模块)并不是注入它们的工具。在浏览dredd文档时,我没有看到任何对环境变量或参数的引用,这可能值得在项目中创建一个问题,并开始与开发人员讨论,看看这是否得到支持

我可以想出许多方法来解决您的特定问题,但它们都涉及到额外的工具来呈现带有注入变量的YAML。对于您的情况,最简单的解决方案可能是在(而不是版本控制的circle.yml)中设置环境变量。然后,设置一个预构建步骤,在该步骤中生成YAML配置。为此,用BASH脚本包装YAML,其中包含的YAML文档作为一个脚本

#/bin/bash
#访问令牌和刷新令牌由CircleCI注入

cat使用头的更好方法是设置头请求。在使用时,请尝试设置节点环境变量:

var hooks=require('hooks');
hooks.beforeach(函数(事务){
transaction.request.headers.Cookie=
'访问令牌='+访问令牌+
“;刷新令牌=”+刷新令牌;
}
#!/bin/bash

# ACCESS_TOKEN and REFRESH_TOKEN are injected by CircleCI

cat <<EOF > config.yml
---
header: ['Cookie: access_token=${ACCESS_TOKEN}; refresh_token=${REFRESH_TOKEN}']
EOF