php Editor Banana Artikel ini akan memperkenalkan cara menggunakan API awam untuk menjalankan ujian mudah ke atas Alex Edwards/SCS. Alex Edwards/SCS ialah perpustakaan PHP untuk pengurusan sesi yang memudahkan untuk mengurus sesi pengguna dalam aplikasi anda. Dengan menguji dengan API awam, kami boleh mengesahkan kefungsian dan prestasi perpustakaan serta memastikan kestabilan dan kebolehpercayaannya dalam aplikasi dunia sebenar. Dalam artikel ini, kami akan membimbing anda langkah demi langkah tentang cara menjalankan ujian mudah dan menunjukkan analisis dan tafsiran keputusan ujian. Mari mulakan!
Soalan ini adalah susulan kepada soalan ini. Saya ingin melakukan ujian mudah di https://pkg.go.dev/github.com/alexedwards/scs/[email protected] untuk mengesahkan fungsi yang saya mahu gunakan. Pada asasnya, saya hanya mahu memasukkan beberapa data ke dalam sesi, mengeluarkannya dan mengesahkan bahawa ia adalah sama. Sesuatu seperti ini:
func testscs_setgetissame1(t *testing.t) { sessionmanager := scs.new() req := httptest.newrequest("get", "/", nil) key := "boolean" expected := false sessionmanager.put(req.context(), key, expected) actual := sessionmanager.getbool(req.context(), key) assert.equal(t, expected, actual) }
Ini akan menjana panik: scs: Tiada data sesi dalam konteks.
Saya cuba menyalin contoh daripada pakej httptest, tetapi httptest.server tidak melaksanakan http.handler (kaedah servehttp tiada).
func TestScs_SetGetIsSame2(t *testing.T) { sessionManager := scs.New() ts := httptest.NewServer((http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { fmt.Fprintln(w, "Hello, client") expected := true sessionManager.Put(r.Context(), "key", expected) actual := sessionManager.GetBool(r.Context(), "key") assert.Equal(t, expected, actual) }))) defer ts.Close() res, err := http.Get(ts.URL) if err != nil { log.Fatal(err) } greeting, err := io.ReadAll(res.Body) res.Body.Close() if err != nil { log.Fatal(err) } fmt.Printf("%s", greeting) sessionManager.LoadAndSave(ts) }
Saya juga melihat ujian dalam repositori alexedwards/scs tetapi mereka menggunakan fungsi peribadi addsessiondatatocontext.
Apakah cara terbaik dan termudah untuk menguji sesi semasa?
Saya melihatnya dalam kod anda
ts := httptest.newserver(http.handlerfunc(func(w http.responsewriter, r *http.request) { // ... })) sessionmanager.loadandsave(ts) // this line is incorrect
Anda cuba menambah pelayan ujian (ts
) 传递给 sessionmanager.loadandsave
。这将不起作用,因为 sessionmanager.loadandsave
需要 http.handler
,并且 ts
的类型为 *httptest.server
,而不是 http.handler
.
Sebaliknya, anda harus menyerahkan pengendali sebenar kepada sessionmanager。在创建测试服务器之前加载并保存
.
Untuk ini anda boleh menggunakan sessionmanager.loadandsave
包装实际的处理函数(它确实返回 http.handler
),然后再将其传递给 httptest.newserver
.
handler := sessionmanager.loadandsave(http.handlerfunc(func(w http.responsewriter, r *http.request) { // ... logic here ... })) ts := httptest.newserver(handler)
Dengan menggunakan sessionmanager.loadandsave
中间件包装实际的处理程序函数来创建一个新的处理程序。然后将这个包装的处理程序传递给 httptest.newserver
.
Jika anda menggabungkannya:
package main import ( "fmt" "github.com/alexedwards/scs/v2" "github.com/stretchr/testify/assert" "io" "log" "net/http" "net/http/httptest" "testing" ) func TestScs_SetGetIsSame2(t *testing.T) { sessionManager := scs.New() // Create a handler and wrap it using sessionManager.LoadAndSave handler := sessionManager.LoadAndSave(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { fmt.Fprintln(w, "Hello, client") expected := true sessionManager.Put(r.Context(), "key", expected) actual := sessionManager.GetBool(r.Context(), "key") assert.Equal(t, expected, actual) })) // Create a test server with the handler ts := httptest.NewServer(handler) defer ts.Close() // Make a request to the server res, err := http.Get(ts.URL) if err != nil { log.Fatal(err) } // Read the response body greeting, err := io.ReadAll(res.Body) res.Body.Close() if err != nil { log.Fatal(err) } // Print the response body fmt.Printf("%s", greeting) }
Atas ialah kandungan terperinci Ujian mudah alexedwards/scs menggunakan api awam sahaja. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!