Maison > Article > développement back-end > Comment tester unitairement les requêtes et les mutations GraphQL dans Go avec gqgen ?
Lorsque vous travaillez avec GraphQL et Go, les tests unitaires sont cruciaux pour garantir l'exactitude et la fiabilité de votre code. Voici un exemple simple démontrant comment tester efficacement les requêtes et les mutations GraphQL à l'aide de Go, en tenant compte des frameworks que vous avez mentionnés :
<code class="go">package resolver_test import ( "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/graph/resolver" "github.com/mrdulin/gqlgen-cnode/mocks" "github.com/stretchr/testify/mock" "github.com/stretchr/testify/require" ) // Define mock objects for UserService 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) } // Test MutationResolver_ValidateAccessToken func TestMutationResolver_ValidateAccessToken(t *testing.T) { t.Run("should validate accesstoken correctly", func(t *testing.T) { // Create a mock UserService testUserService := new(mocks.MockedUserService) resolvers := resolver.Resolver{UserService: testUserService} // Create a GraphQL client c := client.New(handler.NewDefaultServer(generated.NewExecutableSchema(generated.Config{Resolvers: &resolvers}))) // Define the expected user entity ue := model.UserEntity{ID: "123", User: model.User{Loginname: &loginname, AvatarURL: &avatarURL}} // Set the mock UserService to return the expected user entity testUserService.On("ValidateAccessToken", "abc").Return(&ue) // Define the query to test var resp struct { ValidateAccessToken struct{ ID, Loginname, AvatarUrl string } } q := ` mutation { validateAccessToken(accesstoken: "abc") { id, loginname, avatarUrl } } ` // Execute the query and assert the results c.MustPost(q, &resp) testUserService.AssertExpectations(t) require.Equal(t, "123", resp.ValidateAccessToken.ID) require.Equal(t, loginname, resp.ValidateAccessToken.Loginname) require.Equal(t, avatarURL, resp.ValidateAccessToken.AvatarUrl) }) } // Test QueryResolver_User func TestQueryResolver_User(t *testing.T) { t.Run("should query user correctly", func(t *testing.T) { // Create a mock UserService testUserService := new(mocks.MockedUserService) resolvers := resolver.Resolver{UserService: testUserService} // Create a GraphQL client c := client.New(handler.NewDefaultServer(generated.NewExecutableSchema(generated.Config{Resolvers: &resolvers}))) // Define the expected user detail u := model.UserDetail{User: model.User{Loginname: &loginname, AvatarURL: &avatarURL}, Score: &score, CreateAt: &createAt} </code>
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!