Comment déplacer la fonction de fermeture vers la fonction normale
P粉831310404
P粉831310404 2023-09-05 21:54:44
0
1
578
<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>
P粉831310404
P粉831310404

répondre à tous(1)
P粉563446579

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.

$createSubscription = function () {

    $this->seed(PlansTestSeeder::class);
    $this->seed(SubscriptionsTestSeeder::class);

    $this->assertDatabaseCount('plans', 2);
    $this->assertDatabaseCount('subscriptions', 0);


    Subscription::factory()->create([
        "plan_id" => Plan::where("slug", "bronze")->first()->id
    ]);
    Subscription::factory()->create([
        "plan_id" => Plan::where("slug", "silver")->first()->id
    ]);
    Subscription::factory()->create([
        "plan_id" => Plan::where("slug", "silver")->first()->id,
        "status"  => "expired"
    ]);
    Subscription::factory()->trashed()->create();

    $this->assertDatabaseCount('subscriptions', 4);

};

$createBronzeSubscription = function () {
    $this->seed(PlansTestSeeder::class);
    $this->seed(SubscriptionsTestSeeder::class);

    Subscription::factory()->create([
        "plan_id" => Plan::where("slug", "bronze")->first()->id
    ]);

    $this->assertDatabaseCount('subscriptions', 1);
};


test('can create subscription', function () use ($createSubscription) {
    return \Closure::bind(\Closure::fromCallable($createSubscription), $this, get_class($this))($this);
});

test('can create bronze subscription', function () use ($createBronzeSubscription) {
    return \Closure::bind(\Closure::fromCallable($createBronzeSubscription), $this, get_class($this))($this);
});
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal