【发布时间】:2020-02-29 21:13:07
【问题描述】:
我有一家工厂。它的目的是促进依赖注入。它看起来像:
import SomeImportantObject from "./SomeImportantObject"
import DataInterface from "./DataInterface"
class NoodleFactory {
this.dependency: SomeImportantObject
constructor(dependency: SomeImportantObject) {
// Dependencies.
this.dependency = dependency;
}
create(data: DataInterface) {
return new Noodle(data, this.dependency);
}
}
我正在为它创建一个测试,以确保它正确地创建了对象。该测试非常类似于:
data = {
// Data.
}
mockDependency = "a mocked dependency."
testNoodleFactory = new NoodleFactory(mockDependency);
const expected = new Noodle(data, mockDependency);
const actual = testNoodleFactory.create(data);
test("Factory creates noodles", () => {
expect(actual).toMatchObject(expected);
});
当我运行测试时,我收到以下错误:
@@ -1,6 +1,6 @@
- Noodle {
+ Object {
所有内部数据匹配。
是什么导致对象类型不同?
【问题讨论】:
-
整个示例充满了隐含的任何和未定义的引用(即类型错误),但您担心类型安全?您实际上想在这里实现什么目标?
-
该示例是实际代码的快速表示。我会让它更健壮。
-
playground 表明工厂的 create 方法确实返回了正确的类型。 Jest 的
toMatchObject是关于匹配对象属性的子集。我再重复一遍:你的实际问题是什么? -
据我所知,测试完全是多余的,因为它只是复制了类型检查器已经在做的工作。即使在编辑之后,我仍然不明白你在这里追求什么。你只是想确保它是一个 Noodle 实例?
-
好吧(请参阅我上面评论中的链接),但同样,这是多余的。这就是类型检查器的用途。不要用无用的测试弄乱你的测试套件。但是,是的,
toMatchObject并没有像您认为的那样做。请务必阅读文档。
标签: typescript jestjs ts-jest