【问题标题】:Karate karate-config.js not a js function空手道 karate-config.js 不是 js 函数
【发布时间】:2019-02-02 02:21:45
【问题描述】:

我正在尝试使用空手道进行 e2e 测试,并从最小设置开始。我想在karate-config.js 中创建一些配置项以用于测试,但空手道报告该文件不是 js 函数,因此尝试获取配置时测试失败:

Warning: Nashorn engine is planned to be removed from a future JDK release
12:16:35.264 [Test worker] WARN com.intuit.karate - not a js function or feature file: read('classpath:karate-config.js') - [type: NULL, value: null]
---------------------------------------------------------
feature: classpath:karate/insurer.feature
scenarios:  1 | passed:  0 | failed:  1 | time: 0.0163
---------------------------------------------------------
HTML report: (paste into browser to view) | Karate version: 0.9.1
file:/Users/srowatt/dev/repos/api/price-service/build/surefire-reports/karate.insurer.html
---------------------------------------------------------


-unknown-:4 - javascript evaluation failed: priceBaseUrl, ReferenceError: "priceBaseUrl" is not defined in <eval> at line number 1
org.opentest4j.AssertionFailedError: -unknown-:4 - javascript evaluation failed: priceBaseUrl, ReferenceError: "priceBaseUrl" is not defined in <eval> at line number 1

这是我的karate-config.js

function fn() {

    return {
        priceBaseUrl: "http://localhost:8080"
    };
}

这是我的insurer.feature 测试:

Feature: which creates insurers

Background:
  * url priceBaseUrl
  * configure logPrettyRequest = true
  * configure logPrettyResponse = true

Scenario: basic roundtrip 

# create a new insurer
Given path 'insurers'
And request { name: 'Sammy Insurance', companyCode: '99' }
When method post
Then status 201
And match response == { resourceId: '#number', version: 0, createdBy: 'anonymousUser' }

* def insurerId = response.resourceId

# get insurer by resource id
Given path 'insurers', insurerId
When method get
Then status 200
And match response == { id: '#(id)', name: 'Sammy Insurance', companyCode: '99' }

这是InsurerTest.java 测试运行器:

package karate;

import com.intuit.karate.junit5.Karate;

class InsurerTest {

    @Karate.Test
    public Karate testInsurer() {
        return new Karate().feature("classpath:karate/insurer.feature");
    }
}

【问题讨论】:

    标签: java testing karate


    【解决方案1】:

    请在 karate-config.js 中使用以下代码

    function() {    
        return priceBaseUrl='http://localhost:8080';
    }
    

    【讨论】:

    • 你是正确的,删除​​函数的名称使其工作。
    • 遇到了完全相同的问题,这似乎可行。奇怪的是:我没有编写 karate-config.js 文件。它是由 eclipse 插件或 maven 原型生成的带有函数名
    • 我刚开始时遇到了同样的问题,因为 VSCode 告诉我输入函数名而不是匿名。
    【解决方案2】:

    当我看到这个时:

    Warning: Nashorn engine is planned to be removed from a future JDK release
    

    我怀疑您使用的是 Java 9 或 11?老实说,我们还没有在这些 Java 版本上完全测试空手道。您是否可以确认 Java 8(也可能是 9 / 10)是可以的。

    也就是说,我们有兴趣尽快解决此问题,因此,如果您可以提交一个示例项目,我们可以复制此问题,请这样做:https://github.com/intuit/karate/wiki/How-to-Submit-an-Issue

    编辑:Karate 1.0 将使用 GraalVM 而不是 Nashorn,甚至可以在 JDK 16 上运行:https://software-that-matters.com/2021/01/27/7-new-features-in-karate-test-automation-version-1_0/

    【讨论】:

    • 我可以确认我正在使用 JDK11,并且删除了@raghveer 建议的函数名称使其工作。
    • @ShaneRowatt 感谢您的更新!这将帮助其他人。仅供参考 - 我们将在中期转向 GraalVM JS 引擎:twitter.com/ptrthomas/status/1095346113027092480
    • @PeterThomas 的回答似乎更正确。解决了最初的问题,而不仅仅是症状。从 JDK 1.10 切换到 1.8 解决了我的问题
    • 一个更新 - 这在空手道 0.9.3 版及更高版本中得到修复:github.com/intuit/karate/issues/724 - Java 版本 8 - 12 应该可以工作
    • 我想我仍然在 Java 11 上使用 karate V0.9.5 看到这个警告
    猜你喜欢
    • 1970-01-01
    • 2019-06-16
    • 1970-01-01
    • 2020-01-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-02-12
    相关资源
    最近更新 更多