Puncte:0

Test funcțional pentru e-mailuri (subiect și titlu)

drapel bo

Întrebare: Cum poate un test funcțional Drupal (extend BrowserTestBase) să verifice un anumit subiect de e-mail și corp de e-mail definite în hook_mail într-un modul personalizat?

Context:

Am un modul personalizat care trimite un e-mail anumitor persoane în cazul în care este creat un nou nod al unui anumit pachet.

Există un test funcțional (BrowserTestbase) pentru aceasta, în același mod în care modulul utilizator o face pentru Core:

https://api.drupal.org/api/drupal/core%21tests%21Drupal%21KernelTests%21Core%21Action%21EmailActionTest.php/function/EmailActionTest%3A%3AtestEmailAction/8.9.x

Acest test este verde. Subiectul și corpul sunt verificate după

$captured_emails = $this->drupalGetMails(); 

$this->assertEqual($captured_emails[0]['params']['subject'],"Subiectul meu dorit");

$this->assertEqual($captured_emails[0]["params"]["body"], "Corpul meu dorit");

DAR e-mailurile reale care sunt livrate nu au subiect ȘI nu au corp! Cum este posibil ? Am făcut o greșeală în modulul personalizat când am vrut să trimit e-mailul:

$mailManager->mail('my_custom', $key, $recipient, $langcode, $params, $from_email);

Prima valoare a parametrului a fost greșită. Ca și cum modulul este numit „my_awesome”, dar nu „my_custom”. În acest caz, Drupal nu va apela implementarea hook_mail în my_awesome_mail, prin urmare obiectul $message nu va fi umplut cu subiect și corp. Nu există plângeri sau excepții. Testul este verde, e-mailul este gol.

drapel fr
Linkul din postarea dvs. este un test Kernel, nu un test funcțional și testează pluginul de bază EmailAction.Nu testează e-mailurile pe care le trimiți prin $mailManager->mail() cu propriul tău hook_mail(). Ar trebui să vedem hook_mail() și funcția completă de testare pentru a vă ajuta să înțelegeți de ce modulul personalizat nu include un corp sau un subiect. Bănuiesc că hook_mail() este greșit - unul dintre aceste lucruri obligatorii pe care trebuie să le faceți în hook_mail() este să setați corect subiectul și corpul - nu este suficient să transmiteți valorile către $mailManager->mail().
drapel bo
Da, deoarece am scris parametrul modulului în mailmanager->mail a fost greșit și hook_mail nu a fost apelat. De aceea testul este verde, dar e-mailul care a fost trimis nu are corp și nici subiect. Întrebarea aici este: cum pot scrie un test care este roșu pentru că lipsesc subiectul și corpul? Și chiar mai complicat: cum pot scrie acest test independent de ce fel de plugin auf mail (drupal default, smyfony-/swiftmail, sesmailer,â¦) este instalat?
drapel fr
Nu, testul este verde, deoarece testul testează EmailAction și nu testează deloc codul dvs. Sau cel puțin asta aduc eu din postarea ta. Încă nu ați afișat codul de test pe care îl utilizați. Dacă doriți să utilizați un test Kernel, copiați ceva de genul core/modules/user/tests/src/Kernel/UserMailNotifyTest.php și modificați-l pentru codul dvs. Schema de bază a codului de testare este 1) configurați mediul de testare, 2) apelați funcția care trimite e-mailuri, 3) utilizați $this-getMails() pentru a recupera orice e-mail trimise din buffer, apoi verificați detaliile mesajului ( s).
drapel bo
Deci, cum este posibil să testăm hook_mail într-un modul personalizat semnificativ? De asemenea, nu este niciodată testat în bază, nu-i așa?

Postează un răspuns

Majoritatea oamenilor nu înțeleg că a pune multe întrebări deblochează învățarea și îmbunătățește legătura interpersonală. În studiile lui Alison, de exemplu, deși oamenii își puteau aminti cu exactitate câte întrebări au fost puse în conversațiile lor, ei nu au intuit legătura dintre întrebări și apreciere. În patru studii, în care participanții au fost implicați în conversații ei înșiși sau au citit transcrieri ale conversațiilor altora, oamenii au avut tendința să nu realizeze că întrebarea ar influența – sau ar fi influențat – nivelul de prietenie dintre conversatori.