Bagaimana untuk Menguji Pertanyaan dan Mutasi GraphQL dalam Go dengan gqgen?

Mary-Kate Olsen
Lepaskan: 2024-10-30 08:52:02
asal
989 orang telah melayarinya

How to Unit Test GraphQL Queries and Mutations in Go with gqgen?

Unit Testing GraphQL in Go

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>
Salin selepas log masuk

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!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!