Ujian Integrasi Aplikasi Phoenix
Uji pengawal, paparan dan saluran Phoenix anda untuk memastikan bahagian berbeza aplikasi web berfungsi bersama.
Ujian Integrasi Aplikasi Phoenix ialah pelajaran Elixir & Phoenix: Pembangunan Bahagian Belakang Boleh Skala percuma di CoddyKit. Ini ialah pelajaran 2 daripada 4. Anda boleh membaca keseluruhan pelajaran di bawah secara percuma — kemudian berlatih secara praktikal dalam pelayar menggunakan penyunting kod terbina dalam dan tutor kecerdasan buatan 24/7. Pelajaran ini merupakan sebahagian daripada laluan pembelajaran Elixir & Phoenix: Pembangunan Bahagian Belakang Boleh Skala, dan kemajuan anda disegerakkan merentas web serta aplikasi CoddyKit. Kursus Elixir & Phoenix: Pembangunan Bahagian Belakang Boleh Skala merangkumi sejumlah 4 pelajaran.
Menguji Interaksi Aplikasi Web
Selamat datang ke ujian integrasi untuk aplikasi Phoenix! Ujian unit memeriksa komponen individu, manakala ujian integrasi memastikan bahagian-bahagian berbeza dalam aplikasi web anda berfungsi bersama dengan lancar.
- Ujian ini mensimulasikan interaksi pengguna sebenar.
- Ujian ini meliputi laluan, pengawal, paparan dan saluran.
- Ujian ini meningkatkan keyakinan bahawa aliran utama aplikasi anda berfungsi dengan betul.
Mensimulasikan Permintaan HTTP
Phoenix.ConnTest ialah alat utama anda untuk menguji permintaan HTTP. Alat ini membolehkan anda mensimulasikan permintaan (GET, POST, PUT, DELETE) kepada aplikasi Phoenix tanpa memerlukan pelayan langsung.
Kami menggunakan fungsi seperti get/2, post/3 dan put/3 untuk menghantar permintaan, kemudian membuat penegasan terhadap sambungan yang terhasil (conn).
defmodule MyPhoenixAppWeb.ExampleTest do
use ExUnit.Case, async: true
import Phoenix.ConnTest
# Assume a simple router route: get "/hello", PageController, :hello
# and PageController.hello renders a page with "Hello World"
test "can get a simple page" do
# Simulate a GET request to /hello
conn = get("/hello")
# Assert the HTTP status code
assert conn.status == 200
# Assert the response body contains "Hello World"
assert html_response(conn, 200) =~ "Hello World"
end
endMenguji Permintaan GET
Permintaan GET biasanya digunakan untuk mendapatkan data atau memaparkan halaman. Semasa menguji, anda akan mensimulasikan permintaan itu, kemudian membuat penegasan terhadap kod status respons dan kandungannya.
Gunakan html_response/2 untuk mengekstrak isi HTML dan membuat penegasan terhadap kandungannya menggunakan padanan corak (=~).
defmodule MyPhoenixAppWeb.PostControllerTest do
use ExUnit.Case, async: true
import Phoenix.ConnTest
# Assume we have a router route: get "/posts", PostController, :index
# And PostController.index renders a list of posts including "My First Post"
test "lists all posts on GET /posts" do
# Simulate a request to the /posts endpoint
conn = get("/posts")
# Assert that the request was successful and contains expected content
assert conn.status == 200
assert html_response(conn, 200) =~ "<h1>All Posts</h1>"
assert html_response(conn, 200) =~ "My First Post"
end
endMenguji Permintaan POST
Permintaan POST sering digunakan untuk mencipta sumber baharu atau menghantar data borang. Semasa menguji, anda akan menghantar parameter bersama-sama permintaan itu.
Selepas penciptaan berjaya, pengawal biasanya mengubah hala. Gunakan redirected_to/1 untuk memeriksa laluan ubah hala.
defmodule MyPhoenixAppWeb.PostControllerTest do
use ExUnit.Case, async: true
import Phoenix.ConnTest
# Assume we have a router route: post "/posts", PostController, :create
# This action creates a post and redirects to the index page.
test "creates a new post on POST /posts" do
post_params = %{"post" => %{"title" => "New Post", "body" => "Content"}}
# Simulate a POST request with parameters
conn = post("/posts", post_params)
# Assert that a redirect occurred to the posts index
assert redirected_to(conn) == "/posts"
end
endMembuat Penegasan terhadap Kandungan yang Dipaparkan
Amat penting untuk mengesahkan bahawa paparan anda menghasilkan data dan struktur yang betul. html_response/2 membolehkan anda mendapatkan HTML yang dihasilkan sebagai rentetan.
Anda kemudiannya boleh menggunakan penegasan rentetan atau ungkapan nalar untuk menyemak teks, tag HTML atau kandungan dinamik tertentu.
defmodule MyPhoenixAppWeb.PageControllerTest do
use ExUnit.Case, async: true
import Phoenix.ConnTest
# Assume get "/dashboard" renders a page with user information
test "renders dashboard with user info" do
# For this example, we simulate a simple GET (no session handling here)
conn = get("/dashboard")
assert conn.status == 200
response_html = html_response(conn, 200)
# Check for specific elements in the rendered HTML
assert response_html =~ "<title>Dashboard</title>"
assert response_html =~ "<span>Welcome, John Doe!</span>"
assert response_html =~ ~r/Last Login: \d{4}-\d{2}-\d{2}/ # Regex for dynamic date
end
endMenguji Lencongan dan Ralat
Menguji aliran pengguna amat penting. Phoenix menyediakan pembantu untuk menegaskan lencongan dan respons ralat:
assert_redirected_to(conn, path): Mengesahkan lencongan ke laluan tertentu.assert_error_sent(conn, status): Menyemak kod status ralat HTTP.json_response(conn, status): Mengekstrak isi JSON daripada ralat API.
defmodule MyPhoenixAppWeb.AuthControllerTest do
use ExUnit.Case, async: true
import Phoenix.ConnTest
# Assume post "/login" redirects to /dashboard on success
test "redirects after successful login" do
login_params = %{"email" => "test@example.com", "password" => "password"}
conn = post("/login", login_params)
assert redirected_to(conn) == "/dashboard"
end
# Assume post "/register" sends a 400 error for invalid data
test "sends 400 error for invalid registration" do
invalid_params = %{"email" => "bad", "password" => "short"}
conn = post("/register", invalid_params)
assert conn.status == 400
assert json_response(conn, 400) == %{"errors" => %{"email" => ["is invalid"]}}
end
endMensimulasikan Sesi Pengguna
Banyak aplikasi web bergantung pada sesi untuk mengekalkan keadaan, seperti pengguna yang telah log masuk. Dalam ujian, anda boleh memanipulasi sesi sambungan secara manual untuk mensimulasikan keadaan pengguna yang berbeza.
Gunakan build_conn/0 untuk mencipta sambungan baharu, kemudian put_session/3 untuk menambah data sesi sebelum membuat permintaan anda.
defmodule MyPhoenixAppWeb.SessionControllerTest do
use ExUnit.Case, async: true
import Phoenix.ConnTest
# Assume get "/profile" requires a user_id in the session
test "accesses profile with session data" do
# Build a connection and add a user_id to its session
conn =
build_conn()
|> put_session(:user_id, 123)
|> get("/profile")
assert conn.status == 200
assert html_response(conn, 200) =~ "User Profile for ID: 123"
end
test "redirects unauthenticated users" do
# No session data means no authenticated user
conn = get("/profile")
assert redirected_to(conn) == "/login"
end
endPengenalan kepada Pengujian Saluran
Saluran Phoenix digunakan untuk komunikasi masa nyata melalui WebSockets. Ujian integrasi bagi saluran mengesahkan bahawa klien boleh menyambung, menyertai topik, menghantar mesej dan menerima siaran dengan betul.
Ini amat penting untuk aplikasi sembang, papan pemuka langsung dan apa-apa ciri yang memerlukan kemas kini serta-merta.
Menyambung kepada Saluran
Phoenix.ChannelTest menyediakan fungsi untuk mensimulasikan klien yang menyambung kepada WebSocket anda dan menyertai topik saluran tertentu. Fungsi utama yang akan anda gunakan ialah subscribe_and_join/3.
Fungsi ini mengembalikan {:ok, pid, socket}, dengan socket mewakili sambungan klien kepada saluran tersebut.
defmodule MyPhoenixAppWeb.ChatChannelTest do
use ExUnit.Case, async: true
use Phoenix.ChannelTest
# Assume MyPhoenixAppWeb.UserSocket is your main WebSocket module
# and it handles joining a "room:lobby" channel.
test "can join the lobby channel" do
# Simulate a client connecting and joining "room:lobby" with no params
{:ok, _pid, socket} = subscribe_and_join(MyPhoenixAppWeb.UserSocket, "room:lobby", %{})
# Assert that the socket is connected to the correct topic
assert socket.topic == "room:lobby"
# You might also assert on assigns set during the join process
# assert socket.assigns.user_id # If user_id is assigned on join
end
endMenghantar dan Menerima Mesej Saluran
Selepas disambungkan kepada saluran, anda boleh menguji aliran mesej. Gunakan push/3 untuk mensimulasikan klien yang menghantar mesej kepada pelayan, dan assert_broadcast/2 untuk mengesahkan bahawa pelayan menyiarkan mesej kembali kepada topik tersebut.
assert_reply/3 boleh menyemak balasan kepada tolakan klien tertentu.
defmodule MyPhoenixAppWeb.ChatChannelTest do
use ExUnit.Case, async: true
use Phoenix.ChannelTest
# Assume MyPhoenixAppWeb.UserSocket handles "new_msg" events on "room:lobby"
test "broadcasts messages to the lobby" do
{:ok, _pid, socket} = subscribe_and_join(MyPhoenixAppWeb.UserSocket, "room:lobby", %{})
# Simulate pushing a message from the client
ref = push(socket, "new_msg", %{"body" => "Hello everyone!"})
# Assert that the server replied 'ok' to the push
assert_reply ref, :ok
# Assert that a message was broadcasted back to the topic
assert_broadcast "new_msg", %{"body" => "Hello everyone!"}
end
endSemakan Pantas
Mari semak pemahaman anda tentang pengujian integrasi dalam Phoenix.
Ulang Kaji: Keyakinan melalui Integrasi
Anda telah mempelajari cara menulis ujian integrasi yang kukuh untuk aplikasi Phoenix anda!
- Kami membincangkan cara mensimulasikan permintaan HTTP menggunakan
Phoenix.ConnTest. - Kini anda tahu cara menguji permintaan GET dan POST, menegaskan HTML yang dihasilkan serta mengesahkan lencongan dan ralat.
- Kami juga meneroka cara menguji ciri masa nyata dengan
Phoenix.ChannelTest, termasuk mensimulasikan sambungan klien dan aliran mesej.
Dengan menulis ujian ini, anda memperoleh keyakinan bahawa komponen aplikasi anda berfungsi bersama seperti yang dimaksudkan, lalu menghasilkan perkhidmatan web yang lebih stabil dan boleh dipercayai!
Pelajari Elixir dengan tutor kecerdasan buatan — percuma
Tulis dan jalankan kod sebenar dalam pelayar anda, dapatkan bantuan segera daripada tutor kecerdasan buatan yang tersedia 24/7, dan sambung semula dari tempat anda berhenti di web atau dalam aplikasi.
- Kursus
- 12
- Pelajaran
- 48
Soalan Lazim
Adakah pelajaran “Ujian Integrasi Aplikasi Phoenix” percuma?
Ya — teks penuh “Ujian Integrasi Aplikasi Phoenix” boleh dibaca secara percuma di web ini. Untuk berlatih secara interaktif menggunakan penyunting kod terbina dalam dan tutor kecerdasan buatan 24/7, serta membuka kunci baki kursus Elixir & Phoenix: Pembangunan Bahagian Belakang Boleh Skala, tingkat taraf kepada CoddyKit PRO. Kursus Elixir & Phoenix: Pembangunan Bahagian Belakang Boleh Skala merangkumi sejumlah 4 pelajaran.
Apakah yang akan saya pelajari dalam “Ujian Integrasi Aplikasi Phoenix”?
Uji pengawal, paparan dan saluran Phoenix anda untuk memastikan bahagian berbeza aplikasi web berfungsi bersama. Anda berlatih Elixir & Phoenix: Pembangunan Bahagian Belakang Boleh Skala menggunakan kod praktikal yang dijalankan terus dalam pelayar, manakala tutor kecerdasan buatan 24/7 menjawab soalan anda semasa anda mengikuti pelajaran.
Adakah saya memerlukan pengalaman untuk memulakan Elixir & Phoenix: Pembangunan Bahagian Belakang Boleh Skala?
Tiada pengalaman terdahulu diperlukan. Pembelajaran Elixir & Phoenix: Pembangunan Bahagian Belakang Boleh Skala di CoddyKit disusun untuk pelajar daripada peringkat pemula hingga lanjutan, jadi anda boleh bermula di sini atau dari awal dan belajar mengikut kadar anda sendiri. Ini ialah pelajaran 2 daripada 4.
Berapa lamakah pelajaran “Ujian Integrasi Aplikasi Phoenix” diambil?
Kebanyakan pelajaran CoddyKit mengambil masa kira-kira 5–10 minit. Setiap pelajaran ringkas dan interaktif, jadi anda boleh membuat kemajuan secara berterusan dan menyambung tepat dari tempat anda berhenti di web atau aplikasi.
Bolehkah saya menulis dan menjalankan kod dalam pelajaran Elixir & Phoenix: Pembangunan Bahagian Belakang Boleh Skala ini?
Ya. Setiap pelajaran Elixir & Phoenix: Pembangunan Bahagian Belakang Boleh Skala menyertakan penyunting kod terbina dalam, jadi anda boleh menulis dan menjalankan kod sebenar terus dalam pelayar serta menerima maklum balas kecerdasan buatan serta-merta — tanpa memerlukan persediaan setempat.
Semua pelajaran dalam kursus ini
- Ujian Unit dengan ExUnit
- Ujian Integrasi Aplikasi Phoenix
- Mock, Stub dan Data Ujian
- Pengujian Berasaskan Sifat dengan StreamData