Apabila bekerja dengan GraphQL dan Go, ujian unit adalah penting untuk memastikan ketepatan dan kebolehpercayaan kod anda. Berikut ialah contoh mudah yang menunjukkan cara menguji pertanyaan dan mutasi GraphQL secara berkesan menggunakan Go, dengan mengambil kira rangka kerja yang anda nyatakan:
<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>
Atas ialah kandungan terperinci Bagaimana untuk Menguji Pertanyaan dan Mutasi GraphQL dalam Go dengan gqgen?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!