微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

获取 GraphQL 解析函数的测试覆盖率

如何解决获取 GraphQL 解析函数的测试覆盖率

我正在使用 mocha chaisupertest 来测试在我们的 Node/Express 服务器上设置的新 graphql 端点。

我已经运行并相应地通过了所有测试,但是当我运行以下脚本时:

    "test-coverage": "nyc mocha tests/ --recursive",

它不计算代码覆盖率中对 users 解析函数的测试。

我的 graphql 查询端点如下所示:

const RootQuery = new GraphQLObjectType({
    name: 'RootQueryType',fields: () => ({
        users: {
            type: new GraphQLList(UserType),args: {
                searchByName: { type: GraphQLString },queryNearbyUsers: { type: GraphQLBoolean },skip: { type: GraphQLInt },limit: { type: GraphQLInt }
            },async resolve(parent,args,req) {
                const { searchByName,queryNearbyUsers,skip = 0,limit = 20 } = args
                
                // No search criteria was specified so just return an error
                if(!searchByName && !queryNearbyUsers) 
                    throw new Error('NO_SEARCH_CRITERIA_SPECIFIED')

                ...
            }
        },...
})

我的一个测试示例:

    it('should throw an error (NO_SEARCH_CRITERIA_SPECIFIED) when no params supplied',function(done) {
        request.post('spikeql')
        .set({ Authorization: `Bearer ${token}`})
        .send({ query: '{ users { _id firstName lastName displayName rpr distanceAway avatar { styles { thumb_square }}}}'})
        .expect(200) // Todo: Setup GraphQL to match approproate HTTP res codes
        .end((err,res) => {
            if(err) return done(err)
            let errors = res.body.errors
            expect(errors).to.be.an('array')

            // Check to make sure error was sent properly
            expect(errors[0]).to.have.property('message','NO_SEARCH_CRITERIA_SPECIFIED')
            expect(errors[0].message).to.be.a('string')
            done()
        })
    })

我对 GET_USERS 查询使用不同的输入执行了其他 3 次测试。他们都通过了。只是没有在覆盖率报告中进行跟踪。

graphql 和单元/集成测试的新手,因此感谢任何帮助。如果需要,可以提供其他信息。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。