Comment déplacer la fonction de fermeture vers la fonction normale
P粉831310404
2023-09-05 21:54:44
<p>
<p>目前,我有一些标准测试:</p>
<pre class="brush:php;toolbar:false;">test('peut obtenir le dernier abonnement des abonnés', function () {
$this->seed(PlansTestSeeder::class);
$this->seed(SubscriptionsTestSeeder::class);
$this->assertDatabaseCount('plans', 2);
$this->assertDatabaseCount('abonnements', 0);
Abonnement ::factory()->create([
"plan_id" => Plan::where("slug", "bronze")->first()->id
]);
Abonnement ::factory()->create([
"plan_id" => Plan::where("slug", "silver")->first()->id
]);
Abonnement ::factory()->create([
"plan_id" => Plan::where("slug", "silver")->first()->id,
"statut" => "expiré"
]);
Abonnement ::factory()->trashed()->create();
$this->assertDatabaseCount('abonnements', 4);
});
test('peut obtenir des abonnements actifs aux abonnés', function() {
$this->seed(PlansTestSeeder::class);
$this->seed(SubscriptionsTestSeeder::class);
$silverPlan = Plan::where("slug", "silver")->first();
$abonnement1 = Abonnement::factory()->create([
"plan_id" => Plan::where("slug", "silver")->first()->id,
"ID_abonné" => 1,
"type_d'abonné" => "ApresourcingFrameworkBillingTestsModelsSubscriber",
"créé_à" => maintenant()->sous-jours(2),
"commencé_à" => maintenant()->sous-jours(2)
]);
$abonnement2 = Abonnement::factory()->create([
"plan_id" => $silverPlan->id,
"ID_abonné" => 1,
"type_d'abonné" => "ApresourcingFrameworkBillingTestsModelsSubscriber",
"créé_à" => maintenant()->sous-jours(1),
"commencé_à" => maintenant()->sous-jours(1)
]);
$user = Abonné::find(1);
$abonnement = $user->latestSubscription();
attendre($abonnement->id)->toBe($abonnement2->id);
});</pré>
<p></p>
<p>Ce que je veux faire, c'est le changer en quelque chose comme ceci : </p>
<pre class="brush:php;toolbar:false;">test('peut obtenir le dernier abonnement des abonnés', getLatestSubscription());
test('peut obtenir des abonnements actifs aux abonnés', getActiveSubscriptions());
fonction getLatestSubscription() {
/// code de fonction ici
});
fonction getActiveSubscriptions() {
// code de fonction ici
});</pré>
<p>Cependant, la fonction test contient une référence à $this qui est disponible dans la fermeture normale mais pas dans la fonction standard car je l'y ai définie. </p>
<p>Edit : j'utilise le plugin laravel pest - je ne sais pas si cela a un impact sur l'utilisation de $this</p>
<p>Existe-t-il un moyen de résoudre ce problème ? </p>
Merci pour quelques conseils dans les réponses. Pas aussi soigné que je l'espérais, mais au moins cela signifie que tous les appels de test (« description du test ») se trouvent au même endroit au bas du fichier php.