Bagaimana untuk Menguji Pertanyaan dan Mutasi GraphQL dengan Berkesan dengan Testify dan GQLgen di Golang?

Patricia Arquette
Lepaskan: 2024-10-26 12:26:02
asal
291 orang telah melayarinya

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

Unit Testing GraphQL di Golang

Apabila menguji pertanyaan dan mutasi GraphQL dalam aplikasi Golang, adalah penting untuk mempunyai strategi ujian yang mantap untuk memastikan kefungsian dan kebolehpercayaan anda Titik akhir API.

Terletak dalam labirin rangka kerja ujian Golang, memberi keterangan menjadi pilihan utama kerana kesederhanaan dan kelengkapannya. Digabungkan dengan pakej gqlgen/klien, yang memberikan bantuan yang tidak ternilai dalam menguji GraphQL, anda boleh menyelidiki alam ganjaran ujian unit yang berkesan.

Mari kita mulakan contoh praktikal untuk menerangkan proses menguji pertanyaan dan mutasi 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>
Salin selepas log masuk

Menggunakan objek olok-olok ini, kami boleh meneruskan untuk mencipta ujian unit komprehensif yang mengesahkan kefungsian penyelesai GraphQL kami:

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

Dengan melaksanakan pendekatan ujian ini, anda boleh dengan berkesan teliti penyelesai GraphQL anda dan lengkapkan aplikasi anda dengan asas kualiti dan kebolehpercayaan yang kukuh.

Atas ialah kandungan terperinci Bagaimana untuk Menguji Pertanyaan dan Mutasi GraphQL dengan Berkesan dengan Testify dan GQLgen di Golang?. 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!