有没有办法让等号 (==) 检查 kotlin.js.Date 对象工作?
Is there a way to make equals (==) check on kotlin.js.Date object work?
我想就我们在 Kotlin Multiplatform 项目中尝试对特定平台 Date
class 进行单元测试时遇到的问题提出一些 help/suggestions 问题。
我们的 Kotlin 多平台库目标; JVM, Native & JavaScript 并且正在使用特定于平台的日期 classes:
- java.util.Date (JVM)
- platform.Foundation.NSDate(本地)
- kotlin.js.Date (JS)
通过 expected/actual Date
class 公开并在 public 域中使用 classes 在公共包中。例如:
public data class Event {
val id: String,
val start: Date
}
长话短说;在进行单元测试时,我们发现 assertEquals 对 JVM 和 Native 有效,但对 JavaScript 无效。例如:
import kotlin.js.Date
import kotlin.test.Test
import kotlin.test.assertEquals
class DateEqualsTest {
@Test
// Fails!
fun dateEquals() {
val first = Date(1_630_399_506_000)
val second = Date(1_630_399_506_000)
assertEquals(first, second)
}
@Test
// Succeeds
fun timestampEquals() {
val first = Date(1_630_399_506_000)
val second = Date(1_630_399_506_000)
assertEquals(first.getTime(), second.getTime())
}
}
JS 的 assertEquals
失败是因为(我猜)kotlin.js.Date class.
中缺少 equals() 运算符
关于如何使 assertEquals
在给定我们的用例的所有平台上工作的任何建议?我可以想象一个解决方法是引入一个 DateWrapper
class 来包装 Date
class 并手动实现 equals() ...但这需要使用重构我们的 public API 不确定这是否是最好的方法。所以非常欢迎任何帮助/建议。非常感谢!
assertEquals
将不起作用,因为您无法将 equals
方法添加到 kotlin.js.Date
class - 它是 external function exposing Date API 并且所有比较都会以与在 JS 中相同的方式完成
刚看完这篇文章:
- Compare two dates with JavaScript
要使其正常工作,您应该使用 getTime()
或在您编写时提供包装器 class 或 在测试中创建重载的 assertEquals 方法 class 或另一个 util 文件
fun assertEquals(d1: Date, d2: Date) {
kotlin.test.assertEquals(d1.getTime(), d2.getTime())
}
然后你还需要注意进口
我想就我们在 Kotlin Multiplatform 项目中尝试对特定平台 Date
class 进行单元测试时遇到的问题提出一些 help/suggestions 问题。
我们的 Kotlin 多平台库目标; JVM, Native & JavaScript 并且正在使用特定于平台的日期 classes:
- java.util.Date (JVM)
- platform.Foundation.NSDate(本地)
- kotlin.js.Date (JS)
通过 expected/actual Date
class 公开并在 public 域中使用 classes 在公共包中。例如:
public data class Event {
val id: String,
val start: Date
}
长话短说;在进行单元测试时,我们发现 assertEquals 对 JVM 和 Native 有效,但对 JavaScript 无效。例如:
import kotlin.js.Date
import kotlin.test.Test
import kotlin.test.assertEquals
class DateEqualsTest {
@Test
// Fails!
fun dateEquals() {
val first = Date(1_630_399_506_000)
val second = Date(1_630_399_506_000)
assertEquals(first, second)
}
@Test
// Succeeds
fun timestampEquals() {
val first = Date(1_630_399_506_000)
val second = Date(1_630_399_506_000)
assertEquals(first.getTime(), second.getTime())
}
}
JS 的 assertEquals
失败是因为(我猜)kotlin.js.Date class.
关于如何使 assertEquals
在给定我们的用例的所有平台上工作的任何建议?我可以想象一个解决方法是引入一个 DateWrapper
class 来包装 Date
class 并手动实现 equals() ...但这需要使用重构我们的 public API 不确定这是否是最好的方法。所以非常欢迎任何帮助/建议。非常感谢!
assertEquals
将不起作用,因为您无法将 equals
方法添加到 kotlin.js.Date
class - 它是 external function exposing Date API 并且所有比较都会以与在 JS 中相同的方式完成
刚看完这篇文章:
- Compare two dates with JavaScript
要使其正常工作,您应该使用 getTime()
或在您编写时提供包装器 class 或 在测试中创建重载的 assertEquals 方法 class 或另一个 util 文件
fun assertEquals(d1: Date, d2: Date) {
kotlin.test.assertEquals(d1.getTime(), d2.getTime())
}
然后你还需要注意进口