注意:以下翻译的准确性尚未经过验证。这是使用 AIP ↗ 从原始英文文本进行的机器翻译。

存根对象搜索和聚合

在编写单元测试时,您可能希望为对象集搜索或对象聚合创建预设答案(也称为“存根”),以指定您的代码在编写单元测试时所做调用的响应。您需要从 "@foundry/functions-testing-lib" 中导入 { whenObjectSet } 以使用存根。

测试对象集上的筛选

Copied!
1 2 3 4 5 6 7 import { Objects } from "@foundry/ontology-api"; const objectSet = Objects.search().objectType(); // 断言 myFunctions.filterObjectSet(objectSet) 的结果应等于 objectSet 中满足条件 s.prop.range().gte(0) 的元素集合 expect(myFunctions.filterObjectSet(objectSet)) .toEqual(objectSet.filter(s => s.prop.range().gte(0)))

使用存根测试对象属性上的聚合

您可以使用存根定义对聚合调用的响应。

Copied!
1 2 3 4 5 import { whenObjectSet } from "@foundry/functions-testing-lib" // 使用 whenObjectSet 函数来模拟对象的行为。 // 当通过 Objects.search() 搜索对象,然后调用 objectType() 方法并对属性进行求和时,返回结果为 55。 whenObjectSet(Objects.search().objectType().sum(s => s.property)).thenReturn(55);

这意味着每当运行 Objects.search().objectType().sum(s => s.property)) 时,结果将是55。

使用存根测试对象

您还可以使用存根定义某些对象搜索的响应。

Copied!
1 2 3 4 5 6 7 import { whenObjectSet } from "@foundry/functions-testing-lib"; // 使用 whenObjectSet 模拟一个对象集合查询操作 whenObjectSet(Objects.search().objectType().orderBy().takeAsync(10)).thenReturn([employeeObj]) // 测试 myFunctions.aggregateSum 函数,期望其对 objectSet 的总和结果为 65 await expect(myFunctions.aggregateSum(objectSet)).resolves.toEqual(65);

这意味着,每当运行这个特定的对象搜索聚合时,属性和将解析为65。

使用存根测试不同的对象集

可以通过重载搜索构造器来模拟多个特定对象集搜索。必须为每个对象提供一个rid属性。

Copied!
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 import { whenObjectSet } from "@foundry/functions-testing-lib"; // 创建对象 objA 和 objB,分别设置对象类型为 'a' 和 'b' const objA = Objects.create().objectType('a'); const objB = Objects.create().objectType('b'); // 为对象设置 rid 属性 objA.rid = 'ridA'; objB.rid = 'ridB'; // 使用 whenObjectSet 模拟对象集合的查询和返回结果 // 当搜索对象类型为 objA 时,返回包含 objA 的数组 whenObjectSet(Objects.search().ObjType([objA]).all()).thenReturn([objA]); // 当搜索对象类型为 objB 和 objB 的重复项时,返回包含 objA 和 objB 的数组 whenObjectSet(Objects.search().ObjType([objB, objB]).all()).thenReturn([objA, objB]);