您如何看待 graphql-shield 规则的单元测试?下面是一个规则示例:
export const authenticatedRule = () =>
rule()((_parent, _args, {auth}) => {
if (!auth.isAuthenticated) {
return new ForbiddenError('Authentication required');
}
return true;
});
我目前在javascript中这样测试:
test('should return true if the token is valid and no options provided', async () => {
verifyToken.mockReturnValueOnce(Promise.resolve({sub: jwtSubject, jti: 'jti'}));
expect(await rules.verifyTokenRule('token', {}, {}).func(null, variables)).toEqual(true);
});
这种方法的问题在于 .func 是私有属性。所以对于使用打字稿的测试:
- 使用 //ts-忽略
- 从函数中的规则导出逻辑,例如authenticatedRuleLogic,但是我们最终导出函数只是为了测试,更不用说重复的函数了
也许还有另一种选择被忽略?