Pautan ke Bahagian 1
BAHAGIAN 4
Berikut ialah repo kod sumber Github untuk projek ini: https://github.com/joegiglio/cursor2-kb
Sudah agak lama…
Kali terakhir kami bercakap, Kursor kelihatan rosak dan indeks struktur fail telah rosak. Selepas menunggu 23 hari untuk pembetulan, saya gembira untuk melaporkan bahawa masalah itu akhirnya nampaknya dapat ditangani! UI masih aneh dan nampaknya perlahan dengan beberapa jenis kebocoran memori selepas beberapa ketika yang boleh diperbaiki dengan memulakan semula. Tetapi sekurang-kurangnya sekarang ia membuat perubahan pada fail yang betul dan saya tidak berhadapan dengan indeks fail yang rosak secara misteri.
Semasa menunggu pembetulan, saya perhatikan bahawa ramai pengguna Kursor mengadu tentang ketidakstabilan Cursor dan/atau Claude. Ya, ia berfungsi kadangkala dan ia mengagumkan apabila ia berfungsi tetapi ia adalah kotak hitam bahagian bergerak, kemas kini berterusan di belakang tabir dan hasil yang tidak konsisten.
Saya memutuskan untuk meletakkan projek Meja Bantuan ke tepi dan ingin melihat sama ada saya boleh membina aplikasi Pangkalan Pengetahuan sebaliknya. Ini mungkin sedikit lebih mudah - tidak memerlukan kemas kini masa nyata atau titik integrasi yang kompleks.
Saya menggunakan tindanan teknologi yang sama yang paling saya kenali - Python, Flask dan Bootstrap dengan pangkalan data SQLite. Semuanya berjalan lancar sehingga saya mengalami masalah dengan "penghijrahan pangkalan data". Sama seperti bab sebelumnya, ia menghasilkan kod kekangan yang SQLite tidak suka dan ia menimbulkan ralat:
Exception during DB migration: raise ValueError("Constraint must have a name") ValueError: Constraint must have a name
Itu sepatutnya cukup mudah untuk Claude membaiki tetapi ia mula meningkat dan saya akhirnya membina semula pangkalan data saya dari awal. Saya akan menyalahkan ini atas kekurangan pengalaman saya dengan debugging flask-migrate tetapi Claude tidak dapat membersihkan kekacauan tanpa hanya mengelap pangkalan data dan memulakan semula.
Setelah keadaan selesai, saya mendapat sistem pangkalan pengetahuan yang kebanyakannya berfungsi, bersama-sama dengan panel Admin, mod gelap / terang, carian (hanya menggunakan pertanyaan SQL) dan penjana data ujian. Ia dibina dengan Quill yang merupakan editor teks sumber terbuka dengan sokongan untuk pemformatan dan imej.
Saya katakan "kebanyakannya berfungsi" kerana saya sengaja tidak merumitkannya dengan pengesahan atau penyewaan mutli. Saya mengekalkan seni bina mudah dengan laluan Flask asas dan operasi CRUD. Tiada API lagi… Mungkin saya akan menyemak semula ciri ini dalam fasa 2.
Semasa saya menambah ciri, saya terus perasan bahawa Claude akan membetulkan satu perkara tetapi memecahkan perkara lain - sama seperti pembangun sebenar. Selain itu, terdapat CSS dan Javascript yang tersebar di seluruh kod. Kadangkala, menambah artikel baharu akan berjaya tetapi penyuntingan tidak akan berfungsi dan begitu juga sebaliknya. Kadangkala kod pemformatan artikel akan muncul di sana sini dan saya terpaksa meminta Claude untuk membersihkannya. Ia telah menjadi pukulan.
Projek ini semakin kompleks sehingga memerlukan automasi ujian yang telah dibincangkan secara ringkas dalam bab lepas. Dalam kebanyakan syarikat, terdapat sedikit bajet untuk QE dan kebanyakan Pembangun tidak menyukai ujian penulisan, jadi mungkin AI boleh membantu?
Saya mempunyai banyak pengalaman dengan Selenium dan Timun tetapi sudah lama. Penulis drama telah mendapat daya tarikan dan kononnya mempunyai pengendalian yang lebih baik untuk pencari dan cuba semula jadi saya meminta Claude untuk membuat beberapa ujian Penulis Drama. Sambungan VS-Code Playwright semuanya seolah-olah menganggap anda menggunakan Javascript dan mereka tidak mempunyai sokongan langsung untuk Python jadi saya perlu menjalankan ujian dari Terminal, seperti haiwan.
[PROMPT]
Saya ingin menambah ujian penyemak imbas hujung ke hujung pada projek ini menggunakan Playwright dan Python. Saya ingin ujian menggunakan lekapan untuk menyemai data yang diperlukan dan kemudian memadam data pada penghujung setiap ujian dijalankan. Ujian perlu membersihkan diri mereka sendiri dan tidak meninggalkan data ujian. Jika anda boleh mengkonfigurasinya untuk menyediakan pangkalan data ujian semasa menjalankan ujian yang lebih baik. Sila beritahu saya perpustakaan yang hendak dipasang, buat ujian untuk 10 senario teratas dengan melihat ciri utama produk dan beritahu saya cara menjalankan ujian ini dari dalam Kursor.
[/PROMPT]
Percubaan pertama cukup bagus, memberikan arahan tentang cara memasang perpustakaan yang diperlukan. Struktur fail untuk ujian juga kelihatan tepat dan ia juga menambah ujian untuk responsif dengan menukar saiz viewport. Sentuhan yang bagus… Tetapi saya tidak menyukai set ujian awal yang dihasilkannya jadi saya memintanya untuk diperhalusi lebih lanjut:
[PROMPT]
Pengesahan belum dilaksanakan dalam produk ini lagi. Tolong jangan buat ujian untuk ciri tersebut. Sebaliknya, fokus pada fungsi Pentadbir seperti mencipta, mengedit dan memadam topik; menambah, menyunting dan memadam artikel. Juga, fokus pada kefungsian pengguna akhir seperti mencari dan melihat artikel. Lihat kod untuk mengetahui 10 ciri teratas produk dan buat ujian untuknya.
[/PROMPT]
Kumpulan ujian seterusnya kelihatan lebih baik sedikit tetapi masih tiada fungsi Pentadbiran.
[PROMPT]
Kebanyakan ujian tersebut kelihatan agak bagus tetapi saya tidak melihat apa-apa untuk fungsi Pentadbir dalam fail @admin.html. Kita perlu mempunyai ujian untuk menambah, mengedit, memadam topik dan menambah, mengedit dan memadam artikel.
[/PROMPT]
Kini nampaknya ia betul dan mencipta kod untuk menguji senario apl berikut:
Ini kelihatan seperti titik permulaan yang hebat. Sekarang mari kita lihat sama ada arahan pelaksanaan Claude adalah betul. Nah, malangnya tidak…
[PROMPT]
Saya mengikut arahan anda untuk menjalankan ujian dan saya menghadapi beberapa masalah.
Saya membuka terminal baharu dan menjalankan arahan "FLASK_ENV=testing flask run" diikuti dengan "pytest tests/e2e/". Saya melihat masalah berikut:
- Apabila saya menavigasi ke halaman utama, saya melihat data yang sama yang saya lihat sebelum ini. Nampaknya tidak beralih kepada pangkalan data ujian.
- Pengecualian: ImportError semasa memuatkan conftest '/Users/joe/cursor2-kb/tests/e2e/conftest.py'. tests/e2e/conftest.py:12: masuk daripada model import Topik, Artikel ModuleNotFoundError: Tiada modul bernama 'model'
[/PROMPT]
Claude mencipta fail models.py, menduplikasi kod dalam fail app.py dan saya mempersoalkan mengapa...
Kod awal untuk aplikasi ini semuanya telah dilakukan dalam fail app.py, termasuk model. Ini berfungsi dengan baik tetapi boleh meninggalkan anda dengan aplikasi fail tunggal yang sukar digunakan. Amalan terbaik mengatakan untuk memisahkan model dan laluan daripada konfigurasi dan di sinilah Claude membawa saya, walaupun ia mengambil laluan yang panjang:
[PROMPT]
Fail models.py yang anda cadangkan kelihatan seperti menduplikasi kod daripada app.py. Adakah lebih masuk akal untuk menggunakan model dalam app.py sebaliknya?
[/PROMPT]
[RESPONS]
Sebenarnya, ini adalah sebaliknya - kita harus mengalihkan model keluar daripada app.py ke models.py untuk mengikut prinsip pengasingan kebimbangan. Ini ialah corak biasa dalam aplikasi Flask di mana:
app.py mengendalikan konfigurasi aplikasi dan permulaan
models.py mengandungi semua model pangkalan data
laluan selalunya dalam fail pelan tindakan yang berasingan
[/RESPONS]
Cukup adil. Jom ikuti!
Nah, tidak begitu pantas. Setelah diperiksa lebih dekat…
[PROMPT]
Saya suka ke mana anda pergi dengan mengasingkan fail models.py tetapi anda turut memadamkan semua laluan daripada fail app.py. Saya tidak melihatnya dalam mana-mana fail lain. Mereka baru sahaja pergi…
[/PROMPT]
Kini Claude menarik semua laluan keluar daripada fail app.py dan mengalihkannya ke dalam fail berasingan untuk cetak biru. Ia membuat terlalu banyak perubahan seni bina dan saya mahu ia dikembalikan... Berhati-hati dengan pembangun baharu yang cemerlang yang mahu menulis semula segala-galanya! Walaupun perubahan yang dicadangkan dianggap sebagai amalan terbaik untuk pangkalan kod Flask profesional, saya tidak akan mempercayai perubahan tersebut sehingga ujian dilaksanakan supaya kami boleh mengesahkan ia berfungsi dengan betul.
[PROMPT]
Saya faham bahawa menggunakan cetak biru ialah kaedah pilihan untuk kod Flask tahap profesional. Walau bagaimanapun, saya tidak selesa membuat refactor seperti itu sekarang. Saya mula-mula cuba menyediakan ujian hujung ke hujung. Kemudian kita boleh melihat struktur projek. Tolong jangan alihkan laluan keluar daripada fail app.py.
[/PROMPT]
Kursor cuba untuk berbalik tetapi UI gabungan adalah lautan hijau dan merah dan saya tidak selesa dengan perubahan itu. Strategi baharu: Mari sediakan beberapa ujian Playwright yang mudah dan kemudian berusaha untuk menambah baiknya secara berperingkat. Mungkin ini akan menjadi lebih baik…
Saya menyimpan senarai ujian yang dicadangkan kerana saya suka ke mana arahnya dan kemudian menutup keluar dari tetingkap Komposer Kursor dan memulakan Komposer baharu yang saya percaya mengalih keluar semua kandungan Komposer sebelumnya.
Mari cuba lagi dengan titik permulaan yang lebih mudah. Pembangunan berulang biasanya adalah yang terbaik.
[PROMPT]
Saya ingin menambah ujian penyemak imbas hujung ke hujung pada projek ini menggunakan Playwright dan Python. Sila beritahu saya perpustakaan yang hendak dipasang, buat ujian untuk 10 senario teratas dengan melihat ciri utama produk dan beritahu saya cara menjalankan ujian ini dari dalam Kursor.
[/PROMPT]
Kami mempunyai masalah yang sama kali ini dengan Claude ingin menguji kefungsian yang belum wujud. Masa untuk memarahi Claude!
[PROMPT]
Saya nampak anda sedang membuat ujian untuk fungsi pengesahan. Walaupun kami mempunyai halaman log masuk, ia hanya pemegang tempat dan sebenarnya tidak berfungsi. Ia tidak mempunyai medan untuk membenarkan sesiapa sahaja untuk log masuk. Sila semak semula kod projek dan tampilkan 10 senario ujian teratas untuk Penulis Drama.
[/PROMPT]
Ini menyebabkan Claude meminta maaf dan membuat sekumpulan senario ujian di sekitar fungsi Carian di halaman utama. Saya berharap untuk tidak menyerahkan ujian yang saya inginkan, tetapi sebaliknya mahu ia mencari ciri dengan melihat kod. Tidak berjaya, jadi saya kembali dengan:
[PROMPT]
Ini kelihatan lebih baik tetapi terlalu tertumpu pada carian. Kami memerlukan ujian untuk ciri berikut: cari, buat topik, edit topik, padam topik, buat artikel, edit artikel, padam artikel, lihat artikel dan beberapa ujian responsif untuk memastikan semuanya kelihatan OK pada resolusi skrin yang berbeza.
[/PROMPT]
Kami sudah mula berputar… Ia mencipta rangka kerja asas untuk beberapa ujian lagi tetapi ia membuat terlalu banyak andaian tentang data yang akan wujud. Jangan buat andaian. Inilah sebabnya mengapa adalah lebih baik untuk mempunyai pangkalan data ujian yang telah didahulukan tetapi kami akan cuba untuk sampai ke sana akhirnya. Buat masa ini…
[PROMPT]
Sesetengah ujian ini membuat andaian bahawa pautan tertentu akan sah dan kandungan tertentu akan wujud. Ini mungkin tidak berlaku jika artikel atau topik dipadamkan. Sila jadikan setiap ujian itu sendiri dengan mencipta data yang diperlukan dan kemudian memadamkannya apabila ujian selesai.
[/PROMPT]
Jadi sekarang Claude kembali mencipta perlawanan! Saya rasa tiada jalan untuk mengatasinya jika anda mahu melakukannya dengan betul…
Masalah lain ialah menggunakan rentetan ujian seperti "Subjek Ujian" dan "Artikel Ujian" yang mungkin bertembung jika kami menjalankan ujian selari yang merupakan pendekatan biasa untuk mempercepatkan pelaksanaan. Saya mahu ujian menggunakan data rawak jadi saya menggesa dengan ini:
[PROMPT]
Sila gunakan data rawak untuk nama topik, nama artikel dan kandungan artikel. Ia juga merupakan idea yang baik untuk menambah ujian untuk aksara bahasa asing untuk memastikan ia kelihatan OK semasa menyemak imbas dan mencari.
[/PROMPT]
Saya rasa kita akan memerlukan lebih banyak tweak tetapi ini kelihatan seperti permulaan yang sangat munasabah. Claude mengembalikan yang berikut:
Perubahan ini telah dibuat:
Gunakan Faker untuk menjana data rawak dalam berbilang bahasa
Tambahkan ujian khusus untuk kandungan berbilang bahasa
Sahkan paparan yang betul bagi pelbagai set aksara
Uji kefungsian carian dengan aksara bukan Latin
Sahkan tiada isu pengekodan aksara dalam paparan
Uji penciptaan kandungan dalam berbilang bahasa
Ujian kini mengesahkan bahawa aplikasi anda mengendalikan dengan betul:
Jepun (日本語)
Cina (中文)
Korea (한국어)
Rusia (Русский)
Dan kandungan Inggeris biasa
Setiap ujian mencipta data rawaknya sendiri dan membersihkannya sendiri, menjadikan ujian lebih dipercayai dan bebas.
Ini adalah ujian yang telah dibuat:
Sekarang untuk menjalankannya. Mula-mula, saya perlu memasang perpustakaan pemalsu yang diarahkan oleh Claude kepada saya…
Saya diberi sekumpulan bendera dan pilihan yang berbeza untuk menjalankan ujian. Daripada pengalaman sebelumnya, semua arahan ini kelihatan betul tetapi saya akan menggunakan fail pytest.ini yang Claude cipta dan masukkan beberapa bendera untuk output verbose, tangkapan skrin dan pelaksanaan ujian yang perlahan supaya saya boleh mengikuti sepanjang visual…
Dan sekarang untuk menjalankan pytest tests/e2e/ untuk benar-benar menjalankan ujian!
Semua ujian gagal dengan ralat yang sama ini:
Exception during DB migration: raise ValueError("Constraint must have a name") ValueError: Constraint must have a name
Dalam pytest.ini, base_url ditetapkan kepada http://localhost:5000 yang kelihatan betul kepada saya.
Saya tidak dapat memahami mengapa ia gagal jadi saya bertanya kepada Claude. Dia membuat beberapa tweak kecil dan kemudian mencadangkan saya mengalihkan fail pytest.ini ke direktori ROOT projek dan keluar dari direktori test/e2e tempat dia meletakkannya pada asalnya. Saya menolak perkara ini dan dia berkata ia baik di mana ia berada. OK kalau begitu…
Dia juga mencadangkan saya menggunakan URL mutlak dalam ujian dan bukannya URL yang ditetapkan dalam fail INI dan lekapan teks. salah. Saya juga menolaknya dan dia bersetuju dan membetulkannya. Hilang kepercayaan di sini…
Dengan perubahan ini, saya menjalankan ujian sekali lagi dan kini saya melihat penyemak imbas dibuka dan pergi ke URL asas yang merupakan halaman utama pangkalan pengetahuan tetapi semua ujian masih gagal. Saya pergi beberapa pusingan lagi dengan Claude dan nampaknya isu halaman akar mungkin telah dibetulkan tetapi kini kami gagal dengan:
playwright._impl._errors.Error: Protocol error (Page.navigate): Cannot navigate to invalid URL
Yang kelihatan seperti lebih kepada isu pencari.
[PROMPT]
Kini semua ujian pentadbir dalam test_admin.py gagal dengan ralat ini: admin_page.fill("#topic-title", data["title"]). Itu bukan pencari yang betul. Tolong betulkan.
[/PROMPT]
Claude menetapkan satu ujian tetapi yang lain masih gagal dengan ralat pengesan. Saya mendapat lebih jelas:
[PROMPT]
Selain daripada test_create_topic, baki ujian dalam @test_admin.py gagal dengan ralat pencari. Sila semak semua pengesan dalam ujian dan betulkan mereka.
[/PROMPT]
Claude membuat beberapa perubahan dan kini kami mempunyai satu lagi isu pencari…
[PROMPT]
Kini semua ujian gagal dengan:
tests/e2e/test_admin.py::test_create_topic[chromium] - AssertionError: Pencari dijangka kelihatan
[/PROMPT]
Sudah jelas kami akan berada di sini untuk sementara waktu, berpusing-pusing sementara Claude membuat pembetulan yang diperlukan. Apa yang juga jelas dan malang ialah Claude tidak mempunyai konteks aplikasi dan elemen halaman yang betul tanpa saya perlu jelas. Hanya meminta Claude untuk "melihat kod dan membuat ujian" tidak cukup baik. Anda perlu memahami fungsi ciri dan struktur halaman supaya anda boleh merawatnya.
Claude membantu dalam menyediakan seni bina ujian dengan pytest.ini dan conftest.py tetapi walaupun begitu, ia memerlukan beberapa tweak untuk ujian asas berjalan tanpa perlu segera. kegagalan.
Projek ini menggunakan Bootstrap pada bahagian hadapan bersama dengan pengesahan Javascript dan dialog modal. Claude nampaknya mengalami masa yang sangat sukar dengan ini jika terdapat berbilang modal dalam kod sumber, di mana hanya satu yang kelihatan, iaitu corak reka bentuk biasa. Selepas beberapa lelaran dan membimbingnya dengan pseudo-kod, kami akhirnya mencapai pemahaman dan ujian yang lulus.
Sepanjang ujian ini, Claude membuat banyak andaian tentang nama pencari, yang kebanyakannya tidak wujud di mana-mana dalam kod sumber. Hanya selepas secara jelas memberitahunya untuk melihat dalam fail tertentu, ia dapat membersihkannya tetapi mengapa membuat andaian? Mungkin saya tidak memberinya fail yang betul untuk bermula? Saya masih tidak pasti bagaimana semua itu sepatutnya berfungsi.
Kadangkala ia nampaknya mempunyai akses kepada keseluruhan projek manakala pada masa lain saya perlu lebih jelas. Jika ia memerlukan akses kepada fail, ia harus bertanya dan bukan hanya mencipta kod omong kosong. Ingat, setiap ulang alik anda memerlukan kredit API.
Selain banyak kegagalan ujian, saya juga menghadapi masalah dengan tangkapan skrin tidak disimpan walaupun saya menghantar bendera dalam fail pytest.ini. Claude menawarkan saya beberapa pilih kasih tetapi tiada satu pun daripada mereka menyelesaikan masalah itu. Saya melihat dokumentasi Playwright dan masih tiada penyelesaian. Ini kelihatan seperti satu lagi isu yang "sepatutnya mudah untuk diselesaikan" tetapi anda boleh membakar sedozen permintaan Claude dengan mudah dan tidak sampai ke mana-mana dengan cepat. Saya akan meneruskan buat masa ini, menggunakan penyelesaian yang dicadangkan Claude.
Selepas menghabiskan TERLALU banyak masa membuat tweak dengan Claude, saya kini hanya mempunyai dua ujian yang lulus dan satu pertiga yang bermula sebagai LULUS tetapi akhirnya berakhir sebagai GAGAL disebabkan beberapa konflik antara kod ujian dan kod lekapan. Ia menjadi meletihkan untuk nyahpepijat dan saya rasa seperti saya sedang mengadakan perbualan bulat. Saya telah sampai ke tahap di mana saya hanya menggabungkan perubahan kod yang dicadangkan secara membuta tuli dan mengharapkan keajaiban.
Terdahulu dalam bab ini, niat saya adalah untuk membina abah-abah ujian yang menyemai dan mengalih keluar data ujian bersama-sama dengan lekapan dan fungsi yang boleh digunakan semula untuk memastikan data dan kod ujian bersih. Niat itu sudah lama di luar tingkap dan sekarang saya hanya mahu ujian itu lulus dan saya akan cuba membersihkannya kemudian. Beritahu saya jika mana-mana perkara itu terdengar biasa…
Malah sesuatu yang kelihatan semudah memaksimumkan tetingkap penyemak imbas apabila dilancarkan terbukti terlalu sukar. Claude telah membuat percubaan dengan Python dan Javascript dan ia tidak berfungsi. Dia tidak tahu mengapa dan jenius di Stack Overflow telah menjawab soalan itu beberapa kali dan cadangan mereka juga tidak berkesan. Saya rasa terdapat beberapa konflik kod antara fail tetapi saya tidak tahu kod itu dengan cukup baik untuk memikirkannya sekarang. Di manakah AI apabila anda memerlukannya!?
Saya mendapati bahawa beberapa kod ujian yang dijana mempunyai lebih daripada satu jangkaan/tegaskan. Saya percaya adalah menjadi amalan terbaik untuk hanya mempunyai SATU penegasan setiap ujian tetapi tahu itu tidak selalunya realistik terutamanya apabila ujian itu baharu dan anda masih belum mempercayainya.
Saya mendapati diri saya seorang "jurutera segera" cuba memikirkan cara untuk mendorong sesuatu ke arah yang betul. Memandangkan saya sendiri tidak menulis sebarang kod produk, saya tidak biasa dengan kerja dalamannya dan berharap Claude boleh mengambilnya dan menjalankannya. Lagipun, dia menulisnya tetapi dia mempunyai ingatan yang singkat. Dia memberi anda cukup untuk pergi tetapi sudah tentu tidak cukup untuk meminta sekali dan mengumpul wang.
Apa yang akan menjadikan hidup lebih mudah ialah mempunyai API untuk memanggil fungsi CRUD yang mencipta dan memadam data, meninggalkan ujian hujung ke hujung untuk hanya menguji kefungsian yang dimaksudkan. Kekurangan dan ciri yang tiada pada projek ujian ini mungkin kedengaran terlalu biasa jika anda pernah menulis ujian automatik untuk aplikasi perisian. Anda sering terpaksa menyelesaikan kekurangan produk sebelum anda benar-benar mencuba fungsi produk. Anda mungkin masih ingat kembali dalam bab pertama yang saya berhasrat untuk membina produk API-First dan yang dengan cepat menjadi tidak terkawal. Ketiadaan API, mungkin panggilan SQL terus akan lebih masuk akal untuk persediaan dan pembongkaran.
Jika anda mempunyai ujian automatik yang berfungsi dalam projek lain dan biasa dengan kod dan struktur halaman projek baharu, salin/tampal/tweak mungkin akan membawa anda lebih pantas daripada pendekatan Claude Playwright yang digariskan di sini. Sekurang-kurangnya kemudian anda akan mempunyai kebiasaan dengan kod dan boleh mengubah suai jika dengan sedikit keyakinan. Mulai sekarang (November, 2024), saya mendapati meminta Claude menjana ujian hujung ke hujung dengan Penulis Drama sebagai latihan yang menyakitkan.
TENTANG PENULIS
Joe Giglio ialah veteran 25 tahun dalam industri perisian. Dalam kerjayanya, beliau telah bekerja untuk ISP dial-up tempatan, syarikat permulaan dari semua saiz dan perusahaan yang bergerak perlahan dan mantap. Terdapat pelajaran penting yang dipelajari sepanjang setiap perhentian.
Projek terbaru beliau termasuk:
Latihan dan perundingan kerja jauh: chiefremoteofficer.com
Buku Kindle "Making Remote Work, Work For You"
Kedudukan syarikat jauh. Fikirkan "Glassdoor untuk syarikat terpencil": remotescorecard.com
Prinsip panduan Joe ialah: Jauh diutamakan, dipacu kualiti, juara pelanggan dan pembelajaran sepanjang hayat. Dia seorang introvert dan mengamalkan penjarakan sosial lama sebelum ianya keren!
Beliau kini menetap di North Carolina dan sentiasa berminat dengan peluang baharu, bertemu orang yang berkualiti dan belajar tentang projek menarik.
Hubungi Joe Giglio: joe -AT- joegiglio.org | Twitter | LinkedIn
Atas ialah kandungan terperinci Bahagian Menggunakan Kursor dan Claude untuk Mencipta Ujian Automatik dengan Penulis Drama. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!