更新后全局定义的Java和Javascript函数出现问题

问题描述 投票:0回答:1

我最近将 Karate 从 1.2.0 和 Java 8 更新到 1.4.1 和 Java 11。之前我在 karate-config.js 中全局定义了 Javascript 函数和 Java 类型,这些都是经常使用的。

config.isValidDateTime = read('classpath:validators/datetime-validator.js')
config.TimestampObject = Java.type('utils.Timestamp')

对于 Java 类型,这似乎不再起作用,我无法执行这些方法。当我打电话时

* set userProfile.firstName = UserMockHelper.getRandomFirstName();

我收到错误消息:

org.graalvm.polyglot.PolyglotException: ReferenceError: "UserMockHelper" is not defined

场景中仍然可以直接执行Javascript函数,但在JSON验证中不起作用,例如

And match response.docs[0] contains { timestamp: "#? isValidDateTime(_)" }

我现在总是收到以下错误消息:

TypeError: execute on {} failed due to: Message not supported.
karate
1个回答
0
投票

当您在配置中提到时间戳设置时,您的示例有点令人困惑,但您显示的错误是针对 UserMockHelper 的。 您似乎还在帖子中混合了 js 和 java 设置。

注意:最好将每个问题单独发布。 我将解决 java 设置问题,并要求将 js 问题发布在单独的票证中。

对于java类型问题,可以尝试这样的设置。 我们在 karate.config 中设置以下内容

  config.commonUtils = Java.type('commonutilhelpers.CommonUtils')
  config.dateUtils = Java.type('commonutilhelpers.DateTime')
  config.fileUtils = Java.type('commonutilhelpers.FileUtils')
  config.rndUtils = Java.type('commonutilhelpers.RandomUtils')

这些指向各种 java 文件,其中包含在众多测试中使用的常用函数。

日期时间的示例 java 文件

package commonutilhelpers;

import java.text.ParseException;
import java.text.SimpleDateFormat;

import java.time.format.DateTimeFormatter;
import java.time.Instant;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.LocalTime;
import java.time.ZoneId;
import java.time.ZoneOffset;
import java.time.ZonedDateTime;
import java.util.Calendar;
import java.util.Date;
import java.util.TimeZone;

public class DateTime {
    public static String customCalendar(String fromJs, Integer Year, Integer Month, Integer Day, Integer Hour,
            Integer Minute, Integer Second) {
        SimpleDateFormat sdf = new SimpleDateFormat(fromJs);
        Calendar cal = Calendar.getInstance();
        cal.add(Calendar.YEAR, Year);
        cal.add(Calendar.MONTH, Month);
        cal.add(Calendar.DAY_OF_MONTH, Day);
        cal.add(Calendar.HOUR, Hour);
        cal.add(Calendar.MINUTE, Minute);
        cal.add(Calendar.SECOND, Second);
        String dateAfter = sdf.format(cal.getTime());
        return dateAfter;
    }
}

功能内的使用

* def deferredUntilDate = dateUtils.customCalendarUTC("yyyy-MM-dd'T'HH:mm:ss'Z'", 0,0,7,0,0,0)
© www.soinside.com 2019 - 2024. All rights reserved.