با درود خدمت شما یک تست کوچیکی رو نوشتم برای یکی از برنامه هام برای تمرین تست نویسی یک مشکلی برخورد کردم بخاطر اینکه تست در سندباکس دیتابیس می ره در هر تست جدید و مجزا انگار چیزی در دیتابیس نیست به عنوان مثال
defmodule Khatoghalam.AdminUserTest do
use ExUnit.Case, async: true
use Khatoghalam.DataCase
alias Khatoghalam.Admin.Users.UserQuery
@user %{name: "shahryar", last_name: "tavakkoli", username: "shahryar", gender: 1, email: "[email protected]", password: "32505", status: 1, role: 3}
describe "Happy | Admin Users basic CRUD registration (▰˘◡˘▰)" do
test "add user" do
{:ok, :user_add, _user_info} = assert UserQuery.add_user(@user)
end
test "edit user with id" do
{:ok, :user_add, user_info} = assert UserQuery.add_user(@user)
user_edit = %{name: "shahryar_edit", last_name: "tavakkoli_test", username: "shahryar", gender: 2, email: "[email protected]", password: "32505", status: 1, role: 3}
{:ok, :edit_user, _info} = assert UserQuery.edit_user(user_info.id, user_edit)
end
test "read user with email" do
{:ok, :user_add, user_info} = assert UserQuery.add_user(@user)
{:ok, :find_user_with_email, _user_info} = assert UserQuery.find_user_with_email(user_info.email)
end
test "delete user with id" do
{:ok, :user_add, user_info} = assert UserQuery.add_user(@user)
{:ok, :delete_user, _struct} = assert UserQuery.delete_user(user_info.id)
end
end
end
در تست اول من یک کاربر اضافه کردم حالا در تست بعدی که باید ویرایش بشه من مجبورم دوباره یک کاربر ایجاد کنم آیا امکان این هست که test در تست دیگه استفاده بشه؟ می تونم فانکشن جدا غیر تست درست کنم با اطلاعات پایه ای ولی بیشتر سوالمه برای تست نویسی همچنین استراکچری رو جلو می رند یا کلا من دارم اشتباه جلو می رم ؟
با الکسیر کار نکردم و مسلما نمیدونم سیستم تست نویسی براش چطوریه و البته نمیدونم کار با دیتابیس به چه صورت هست.
ولی مشکل مشابه بارها داشتم. آیا مشکل به خاطر این نیست که کوئریهای insert و update دیتابیس، commit نمیشن؟ آیا اگه کامیت بشن و واقعا برن توی دیتابیس اوکی نمیشه؟
سلام امیدوارم خوب باشید
در اکثر فریورک های تست دیتابیس پاک میشه بعد هر تست و باید هم همینطور باشه تا state در هر تست یکنواخت باشه و اجرا تصادفی تاثیر درتست ها نداشته باشه برای اینکه یک کار قبل هر تست انجام بشه از setup استفاده کن
درود سام عزیز. پس بخاطر همین بود که قبل از کانفیگش توی توضیحاتی در یکی از ارور ها می گفت حتما باید تست جوری باشه که در یک نود خاص باشه و تداخلی پیش نیاد. ممنونم ازت امید وارم همیشه در سلامتی باشی
تشکر
بله دقیقا تست ها باید بدون درنظر گرفتن ترتیب یا زمان اجرا همیشه یک جواب بدهند
و Idempotent باشند
هیچ مشکلی با database شما نیست الیکسیر داره درست کار میکنه