ホームページ  >  記事  >  バックエンド開発  >  Golang で Testify と GQLgen を使用して GraphQL クエリとミューテーションを効果的にテストするにはどうすればよいですか?

Golang で Testify と GQLgen を使用して GraphQL クエリとミューテーションを効果的にテストするにはどうすればよいですか?

Patricia Arquette
Patricia Arquetteオリジナル
2024-10-26 12:26:02273ブラウズ

How to Effectively Test GraphQL Queries and Mutations with Testify and GQLgen in Golang?

Golang での GraphQL の単体テスト

Golang アプリケーションで GraphQL クエリとミューテーションをテストする場合、アプリケーションの機能と信頼性を確保するための堅牢なテスト戦略を持つことが重要です。 API エンドポイント。

Golang テスト フレームワークの迷宮の中に位置する testify は、そのシンプルさと包括性により、推奨される選択肢として最高の地位を占めています。 GraphQL のテストに貴重な支援を提供する gqlgen/client パッケージと組み合わせると、効果的な単体テストというやりがいのある領域を掘り下げることができます。

GraphQL クエリとミューテーションのテスト プロセスを明らかにするための実践的な例に着手しましょう。 :

<code class="go">// graph/resolver/root.resolver_test.go

import (
    "context"
    "testing"

    "github.com/99designs/gqlgen/client"
    "github.com/99designs/gqlgen/graphql/handler"
    "github.com/mrdulin/gqlgen-cnode/graph/generated"
    "github.com/mrdulin/gqlgen-cnode/graph/model"
    "github.com/mrdulin/gqlgen-cnode/mocks"
    "github.com/stretchr/testify/mock"
    "github.com/stretchr/testify/require"
)

...

type MockedUserService struct {
    mock.Mock
}

func (s *MockedUserService) GetUserByLoginname(loginname string) *model.UserDetail {
    args := s.Called(loginname)
    return args.Get(0).(*model.UserDetail)
}

func (s *MockedUserService) ValidateAccessToken(accesstoken string) *model.UserEntity {
    args := s.Called(accesstoken)
    return args.Get(0).(*model.UserEntity)
}
...</code>

これらのモック オブジェクトを利用して、GraphQL リゾルバーの機能を検証する包括的な単体テストの作成に進むことができます:

<code class="go">// graph/resolver/root.resolver_test.go

...

// TestMutationResolver_ValidateAccessToken is a test example for the ValidateAccessToken mutation.
func TestMutationResolver_ValidateAccessToken(t *testing.T) {

    t.Run("should validate accesstoken correctly", func(t *testing.T) {
        // Create a mocked user service
        mockedUserService := new(mocks.MockedUserService)

        // Inject the mocked service into our resolver
        resolvers := resolver.Resolver{UserService: mockedUserService}

        // Create a GraphQL client
        c := client.New(handler.NewDefaultServer(generated.NewExecutableSchema(generated.Config{Resolvers: &resolvers})))

        // Set up expected return values from the mock service
        ue := model.UserEntity{ID: "123", User: model.User{Loginname: &loginname, AvatarURL: &avatarURL}}
        mockedUserService.On("ValidateAccessToken", mock.AnythingOfType("string")).Return(&ue)

        // Run the GraphQL mutation query
        var resp struct {
            ValidateAccessToken struct{ ID, Loginname, AvatarUrl string }
        }
        q := `
      mutation { 
        validateAccessToken(accesstoken: "abc") { 
          id, 
          loginname, 
          avatarUrl 
        } 
      }
    `
        c.MustPost(q, &resp)

        // Assert that the mock service was called as expected
        mockedUserService.AssertExpectations(t)

        // Check the response from the GraphQL mutation
        require.Equal(t, "123", resp.ValidateAccessToken.ID)
        require.Equal(t, "mrdulin", resp.ValidateAccessToken.Loginname)
        require.Equal(t, "avatar.jpg", resp.ValidateAccessToken.AvatarUrl)
    })

}
...</code>

このテスト アプローチを実装することで、効果的にGraphQL リゾルバーを精査し、アプリケーションに品質と信頼性の強固な基盤を備えさせます。

以上がGolang で Testify と GQLgen を使用して GraphQL クエリとミューテーションを効果的にテストするにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。