Karate场景调用appendGlobalHeaders报错:全局函数未定义如何解决?
问题原因
在karate-config.js中直接定义的普通函数不会自动成为全局可调用的函数,Karate不会将这类函数默认暴露给测试场景。只有挂载到karate全局对象上的方法,或者通过配置文件返回的对象中的成员,才能在Feature文件中被访问调用。
解决方法
有两种可行的修复方式:
方式一:将函数挂载到karate全局对象
修改karate-config.js,把appendGlobalHeaders函数赋值给karate对象的属性,这样就能在Feature文件中直接调用:
karate.configure('headers', { 'Content-Type': 'application/json', 'Authorization': 'Bearer <your-token>' }); karate.appendGlobalHeaders = function(headers) { var globalHeaders = karate.get('headers'); return karate.append(headers, globalHeaders); };
方式二:通过配置文件返回包含函数的对象
修改karate-config.js,让它返回一个包含该函数的对象,之后在Feature文件中通过返回的对象引用函数:
修改后的karate-config.js
karate.configure('headers', { 'Content-Type': 'application/json', 'Authorization': 'Bearer <your-token>' }); function appendGlobalHeaders(headers) { var globalHeaders = karate.get('headers'); return karate.append(headers, globalHeaders); } // 返回包含函数的对象 return { appendGlobalHeaders: appendGlobalHeaders };
修改后的Feature文件
需要先获取配置返回的对象,再调用函数:
Feature: Append Global Headers to Request Headers Scenario: Make an API request with appended headers Given url 'https://api.example.com/users' * def config = karate.call('classpath:karate-config.js') * def requestHeaders = config.appendGlobalHeaders({ 'X-Custom-Header': 'Custom-Value' }) When method GET Then status 200
额外提示
注意karate.append()的行为:如果传入的两个对象有重复的键,后面的对象会覆盖前面的。如果希望全局Headers不被请求Headers覆盖,建议调换参数顺序:return karate.append(globalHeaders, headers);
内容的提问来源于stack exchange,提问作者Arun Gopalpuri
相关产品推荐
相关产品推荐

