繁体   English   中英

如何使用各种 arguments 模拟 __init__ 和解析器

[英]How to Mock __init__ and resolvers with various arguments

我见过很多模拟测试的例子,但没有一个显示如何模拟像<graphql.execution.base.ResolveInfo object at 0x106f002a8>这样的东西

例如,如果我想测试这个 class 中的两个方法是否正常工作,我将如何模拟传入的值?

class mySearch(graphene.ObjectType):
    my_search = graphene.Field(
       MySearchWrapper,
       query = graphene.String(description="Search query")
    )

    def __init__(self, args, context, info):
        super(mySearch, self).__init__()


    def resolve_my_search(self, args, context, info):
        return promisify(MySearchWrapper, args, context, info)

__init__方法返回:

args: {}, context: <Request 'http://localhost:8080/graphql' [POST]>, info: <graphql.execution.base.ResolveInfo object at 0x106f000c8>

resolve_my_search方法返回:

args: {'page_type': [u'MyCorgi', u'YourCorgi'], 'query': u'Corgi family', 'domain': u'corgidata.com'}, context: <Request 'http://localhost:8080/graphql' [POST]>, info: <graphql.execution.base.ResolveInfo object at 0x106f002a8>

我知道我可以使用mock_args.json.return_value来模拟字典值,但是...不确定请求和 object。有什么想法吗? 指导? 我已经在这上面花了一个星期,但没有找到出路。

使用unittest.mock python软件包。 这是一个例子:

from unittest import mock

info = mock.create_autospec(graphql.execution.base.ResolveInfo)
info.context.user = AnonymousUser()

我是这样做的。 您可以调整它以模拟GraphQLResolveInfo ,但对于这个用例,我只需要模拟Request object。

from requests import Requests
from unittest.mock import patch

from starlette.authentication import AuthenticationError

@patch("grapql.type.definition.GraphQLResolveInfo.context")
def test_func(context_mock):
    with pytest.raises(AuthenticationError):
        context_mock.side_effect = Request()
        func_to_be_tested(resolver("fake_source", info_mock, data_inputs))

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM