Wie verspottete ich Objekte in Laravel -Tests?
Verwenden Sie Spott für benutzerdefinierte Abhängigkeiten, indem Sie die Erwartungen mit SOFTRECEIVE () festlegen. 2. Verwenden Sie die Fake () -Methode von Laravel für Fassaden wie Mail, Warteschlange und HTTP, um reale Interaktionen zu verhindern. 3.. Ersetzen Sie Container-gebundene Dienste durch $ this-> mock () für die sauberere Syntax. 4. Verwenden Sie http :: fake () mit URL -Mustern, um externe API -Antworten zu simulieren. 5. Wenden Sie partielle Mocke mit make -partial () auf, um nur bestimmte Methoden zu verspotten. 6. Mocks mit Spott :: Close () aufräumen, obwohl die Basistestklasse von Laravel dies normalerweise umgeht. Bevorzugen Sie Fälschungen für Laravel -Komponenten und Mocks für benutzerdefinierte Dienste, um sicherzustellen, dass die Tests schnell, zuverlässig und isoliert bleiben.
Das Verspotten von Objekten in Laravel -Tests ist eine gängige Praxis, um Ihren Code zu isolieren und Nebenwirkungen zu vermeiden - wie Datenbankaufrufe, externe API -Anforderungen oder in der Warteschlange. Laravel bietet dank seiner Integration in Phpunit und der leistungsstarken Mockery
verschiedene Möglichkeiten, Objekte zu verspotten.

Hier erfahren Sie, wie Sie Objekte in Laravel -Tests effektiv verspotteten:
1. Mockery
für Verspottung Abhängigkeiten
Laravel enthält standardmäßig Spott, sodass Sie problemlos Schein von Klassen oder Schnittstellen erstellen können.

Verwenden Sie Spott; Verwenden Sie Illuminate \ Support \ facades \ http; public function test_external_api_is_called () { $ mock = mockery :: mock ('app \ services \ paymentGateway'); $ mock-> sollteReceive ('Charge')-> einmal ()-> andrisewn (true); $ this-> ide (paymentgateway :: class, $ mock); // Führen Sie jetzt Ihre Testlogik aus $ response = $ this-> post ('/pay'); $ response-> assertok (); }
? Die Methode
shouldReceive()
setzt die Erwartungen, wie das Mock verwendet werden soll.
2. Verwenden Sie Laravels eingebaute Fassadenfackeln und Mocks
Verwenden Sie für Laravel -Fassaden (wie Mail
, Queue
, Cache
, Http
usw.) fake()
oder spy()
.

Beispiel: Fälsche die Postfassade
Verwenden Sie Illuminate \ Support \ Fassades \ Mail; public function test_user_registration_sends_email () { Mail :: fake (); // Aktion durchführen $ this-> post ('/register', [ 'Name' => 'John Doe', 'E -Mail' => 'John@example.com', 'Passwort' => 'Geheimnis' ]); // Die Assert -Nachricht wurde gesendet Mail :: AssertSent (WelcomeMail :: Klasse, Funktion ($ mail) { return $ mail-> Hasto ('john@example.com '); }); }
- Verwenden Sie
Mail::fake()
um zu verhindern, dass echte E -Mails gesendet werden. - Verwenden Sie
assertSent()
oderassertNotSent()
um das Verhalten zu überprüfen.
✅ Gleiches Muster funktioniert für:
Queue::fake()
,Cache::fake()
,Notification::fake()
,Http::fake()
.
3.. Verspottete einen im Container gebundenen Dienst
Wenn Sie die Abhängigkeitsinjektion verwenden und einen Dienst im Container ersetzen möchten:
$ this-> ide (someservice :: class, verspottlich :: mock (someservice :: class, function ($ mock) { $ mock-> sollteReceive ('prozess')-> einmal ()-> andReturn ('verspottetes Ergebnis'); }));
Oder sauberer:
$ this-> mock (someservice :: class, function ($ mock) { $ mock-> sollteReceive ('prozess')-> andrisewn ('verspottetes Ergebnis'); });
?
->mock()
ist eine Laravel-Helfer-Methode, dieMockery::mock()
undapp()->instance()
kombiniert.
4. Verwenden Sie Http::fake()
für externe HTTP -Anrufe
Vermeiden Sie es, beim Testen echte APIs aufzurufen:
Http :: fake ([ 'api.github.com/*' => http :: response (['name' => 'laravel'], 200), ]); // Jetzt den tatsächlichen Anruf tätigen $ response = http :: get ('https://api.github.com/orgs/laravel'); // Anfrage wurde gesendet Http :: AssertSent (Funktion ($ request) { Rückgabe $ request-> url () === 'https://api.github.com/orgs/laravel'; });
Sie können auch Http::fake()->preventStrayRequests()
verwenden, um sicherzustellen, dass nur erwartete URLs getroffen werden.
5. Partielle Mocks - nur bestimmte spezifische Methoden verspotten
Manchmal möchten Sie nur eine Methode einer Klasse verspotten und andere real halten.
$ Service = Mockery :: Mock (MyService :: Klasse) -> makePartial () -> SollteRece ('externalcall') -> andreturn ('Dummy') -> getMock (); $ this-> ide (myService :: class, $ service);
Jetzt ist nur externalCall()
verspottet; Andere Methoden laufen normal.
6. Mocks nach Tests aufräumen
Reinigen Sie immer Ihre Mocks, um die Testverschmutzung zu vermeiden:
geschützte Funktion remeddown (): void { Spott :: Close (); Elternteil :: Teardown (); }
✅ Laravels Basistestklassen (wie
TestCase
) verarbeiten dies normalerweise bereits.
Schlüsseltipps
- Bevorzugen Sie Fälschungen (
Mail::fake()
,Queue::fake()
) über volle Mocks, wenn verfügbar-sie sind einfacher und laravelspezifisch. - Verwenden Sie Mocks , wenn Sie eine feinkörnige Kontrolle über Rückgabewerte oder -verhalten benötigen.
- Vermeiden Sie über Gespenst-nur noch verspotten, was Sie isolieren müssen.
- Verwenden Sie
spy()
um tatsächliche Anrufe zu beobachten, ohne sich zu stören:$ this-> Spy (SomeService :: Klasse); // Später: $ this-> sollteavereceind (someservice :: class, 'methode');
Grundsätzlich macht Laravel das Verspotten sauber und ausdrucksstark. Verwenden Sie Fälschungen für Laravel -Komponenten und Spott für benutzerdefinierte Dienste. Es hält Ihre Tests schnell, zuverlässig und unabhängig von externen Systemen.
Das obige ist der detaillierte Inhalt vonWie verspottete ich Objekte in Laravel -Tests?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Heiße KI -Werkzeuge

Undress AI Tool
Ausziehbilder kostenlos

Undresser.AI Undress
KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover
Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Clothoff.io
KI-Kleiderentferner

Video Face Swap
Tauschen Sie Gesichter in jedem Video mühelos mit unserem völlig kostenlosen KI-Gesichtstausch-Tool aus!

Heißer Artikel

Heiße Werkzeuge

Notepad++7.3.1
Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version
Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1
Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6
Visuelle Webentwicklungstools

SublimeText3 Mac-Version
Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Erstellen Sie Referenzen Tabelle, um Empfehlungsbeziehungen zu erfassen, einschließlich Empfehlungen, Empfehlungen, Empfehlungscodes und Nutzungszeit; 2. Definieren Sie die Beziehungen zwischen Hörern und Hasmany im Benutzermodell, um Empfehlungsdaten zu verwalten. 3. Erstellen Sie bei der Registrierung einen eindeutigen Empfehlungscode (kann durch Modellereignisse implementiert werden). 4. Erfassen Sie den Empfehlungscode, indem Sie die Parameter während der Registrierung abfragen, nach Überprüfung eine Empfehlungsbeziehung aufstellen und die Selbstverantwortung verhindern. 5. den Belohnungsmechanismus auslösen, wenn empfohlene Benutzer das angegebene Verhalten (Abonnementauftrag) abschließen; 6. Generieren Sie gemeinsame Empfehlungsverbindungen und verwenden Sie URLs mit Laravel Signature, um die Sicherheit zu verbessern. 7. Empfehlungsstatistiken auf dem Dashboard anzeigen, z. B. die Gesamtzahl der Empfehlungen und konvertierten Zahlen; Es ist notwendig, sicherzustellen, dass Datenbankbeschränkungen, Sitzungen oder Cookies bestehen bleiben.

ChooseseafatureFlagstrategyuchasconfig-basierte, datenbankgetriebene, orthird-partytools-ähnliche Flagsmith

Erstellen Sie ein neues Laravel -Projekt und starten Sie den Service. 2. Generieren Sie das Modell, die Migration und den Controller und führen Sie die Migration aus; 3. Definieren Sie die erholsame Route in Routen/api.php; V. 5. Verwenden Sie Postbote oder Curl, um die API -Funktion zu testen. 6. Fügen Sie optional die API -Authentifizierung durch Heiligtum hinzu; Erhalten Sie schließlich eine klare Struktur, vollständig und erweiterbar Laravelrestapi, geeignet für praktische Anwendungen.

Das Repository -Muster ist ein Entwurfsmuster, mit dem die Geschäftslogik aus der Datenzugriffslogik entkoppelt wird. 1. Es definiert Datenzugriffsmethoden über Schnittstellen (Vertrag); 2. Die spezifischen Vorgänge werden von der Repository -Klasse implementiert. 3. Die Controller verwendet die Schnittstelle durch Abhängigkeitsinjektion und kontaktiert nicht direkt die Datenquelle. 4. Vorteile sind ordentlicher Code, starke Testbarkeit, einfache Wartung und Teamzusammenarbeit; 5. Für mittlere und große Projekte können kleine Projekte das Modell direkt verwenden.

Eloquentorm ist das integrierte Relational Mapping-System von Laravel. Sie betreibt die Datenbank über PHP -Syntax anstelle von nativem SQL, wodurch der Code prägnanter und leicht zu warten ist. 1. Jede Datentabelle entspricht einer Modellklasse, und jeder Datensatz existiert als Modellinstanz. 2. Übernehmen Sie den aktiven Datensatzmodus, und die Modellinstanz kann selbst gespeichert oder aktualisiert werden. 3.. Support -Stapelzuweisung und das $ fillbare Attribut müssen im Modell definiert werden, um die Sicherheit zu gewährleisten. 4. Bieten Sie eine starke Beziehungsunterstützung wie eins zu eins, eins zu viele, viele zu viele usw., und Sie können über Methodenaufrufe auf die zugehörigen Daten zugreifen. 5. Integrierter Abfragekonstruktor, wo OrderBy und andere Methoden als Ketten bezeichnet werden können, um Abfragen zu erstellen; 6. Unterstützen Sie Zubehör und Modifikatoren, die die Nummer beim Erhalten oder Einlegen von Attributen formatieren können.

CreateModifyLaunch.jsonInvScodeByopeningTherunandDebugView, SelectingYourEnvironment (z. B. Python, Node.js) und Konfigurationsfo ryourtestframework (z. B. PyTest, Scherz) .2.setbreakpointSinyourTestFile, SelectTheDeBugConfiguration und Startdebuggingwithf5topaus

Verwenden Sie FormRequests, um eine komplexe Formüberprüfungslogik aus dem Controller zu extrahieren, wodurch die Wartbarkeit und Wiederverwendbarkeit von Code verbessert wird. 1. Erstellungsmethode: Generieren Sie die Anforderungsklasse über den Handwerksbefehl. Machen Sie: Anfrage; 2. Definitionsregeln: Festungsüberprüfungslogik in der Regeln () -Methode festlegen; A. Controller -Verwendung: Empfangen Sie Anfragen mit dieser Klasse direkt als Parameter, und Laravel überprüfen automatisch. 4. Beurteilung des Autorisierungsurteils: Benutzerberechtigungen durch die Autorize () -Methode kontrollieren; 5. Dynamische Anpassungsregeln: Dynamisch unterschiedliche Überprüfungsregeln gemäß dem Anforderungsinhalt zurückgeben.

AccessorsandMutatorsinlaravel'seloquentorMaloutOrmatorMipulatemodelattributesWenRetriesingingingValues.1
