So verschieben Sie die Funktion von der Schließung zur normalen Funktion
P粉831310404
P粉831310404 2023-09-05 21:54:44
0
1
577
<p>我正在尝试使害虫测试文件更易于阅读.</p> <p>目前,我有一些标准测试:</p> <pre class="brush:php;toolbar:false;">test('kann das neueste Abonnement für Abonnenten abrufen', function () { $this->seed(PlansTestSeeder::class); $this->seed(SubscriptionsTestSeeder::class); $this->assertDatabaseCount('pläne', 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" => "abgelaufen" ]); Subscription::factory()->trashed()->create(); $this->assertDatabaseCount('subscriptions', 4); }); test('kann Abonnenten aktive Abonnements erhalten', function () { $this->seed(PlansTestSeeder::class); $this->seed(SubscriptionsTestSeeder::class); $silverPlan = Plan::where("slug", "silver")->first(); $subscription1 = Subscription::factory()->create([ "plan_id" => Plan::where("slug", "silver")->first()->id, "Abonnenten-ID" => 1, "subscriber_type" => „ApresourcingFrameworkBillingTestsModelsSubscriber“, "erstellt_at" => now()->subDays(2), "gestartet um" => now()->subDays(2) ]); $subscription2 = Subscription::factory()->create([ "plan_id" => $silverPlan->id, "Abonnenten-ID" => 1, "subscriber_type" => „ApresourcingFrameworkBillingTestsModelsSubscriber“, "erstellt_at" => now()->subDays(1), "gestartet um" => now()->subDays(1) ]); $user = Subscriber::find(1); $subscription = $user->latestSubscription(); erwarten($subscription->id)->toBe($subscription2->id); });</pre> <p></p> <p>Was ich tun möchte, ist, es in etwa so zu ändern: </p> <pre class="brush:php;toolbar:false;">test('kann das neueste Abonnement für Abonnenten abrufen', getLatestSubscription()); test('kann Abonnenten aktive Abonnements erhalten', getActiveSubscriptions()); Funktion getLatestSubscription() { /// Funktionscode hier }); Funktion getActiveSubscriptions() { // Funktionscode hier });</pre> <p>Allerdings enthält die Testfunktion einen Verweis auf $this, der im normalen Abschluss verfügbar ist, aber nicht in der Standardfunktion, weil ich ihn dort gesetzt habe. </p> <p>Bearbeiten: Ich verwende das Laravel-Pest-Plugin – ich bin mir nicht sicher, ob dies Auswirkungen auf die Verwendung von $this</p> hat. <p>Gibt es eine Möglichkeit, dieses Problem zu lösen? </p>
P粉831310404
P粉831310404

Antworte allen(1)
P粉563446579

感谢回复中的一些提示。不像我希望的那样整洁,但至少这意味着所有测试(“测试描述”)调用都位于 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);
});
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage