Bagaimana untuk mengalihkan fungsi daripada penutupan kepada fungsi biasa
P粉831310404
P粉831310404 2023-09-05 21:54:44
0
1
591
<p>我正在尝试使害虫测试文件更易于阅读。</p> <p>目前,我有一些标准测试:</p> <pre class="brush:php;toolbar:false;">test('boleh mendapatkan langganan terbaharu pelanggan', fungsi () { $this->seed(PlansTestSeeder::class); $this->seed(SubscriptionsTestSeeder::class); $this->assertDatabaseCount('plans', 2); $this->assertDatabaseCount('langganan', 0); Langganan::factory()->create([ "plan_id" => Pelan::di mana("slug", "gangsa")->first()->id ]); Langganan::factory()->create([ "plan_id" => Pelan::di mana("slug", "perak")->first()->id ]); Langganan::factory()->create([ "plan_id" => Pelan::di mana("slug", "perak")->first()->id, "status" => "tamat tempoh" ]); Langganan::kilang()->dibuang()->buat(); $this->assertDatabaseCount('langganan', 4); }); test('boleh mendapatkan langganan aktif pelanggan', function () { $this->seed(PlansTestSeeder::class); $this->seed(SubscriptionsTestSeeder::class); $silverPlan = Plan::where("slug", "perak")->first(); $subscription1 = Langganan::factory()->create([ "plan_id" => Pelan::di mana("slug", "perak")->first()->id, "subscriber_id" => 1, "jenis_pelanggan" => "ApresourcingFrameworkBillingTestsModelsSubscriber", "dicipta_di" => sekarang()->subHari(2), "bermula_pada" => sekarang()->subHari(2) ]); $subscription2 = Langganan::factory()->create([ "plan_id" => $silverPlan->id, "subscriber_id" => 1, "jenis_pelanggan" => "ApresourcingFrameworkBillingTestsModelsSubscriber", "dicipta_di" => sekarang()->subHari(1), "bermula_pada" => sekarang()->subHari(1) ]); $user = Subscriber::find(1); $langganan = $pengguna->latestSubscription(); jangkakan($langganan->id)->untukBe($langganan2->id); });</pre> <p>但是为了提醒自己我编写了哪些测试,我必须一遍又一遍地上下滚动。</p> <p>Apa yang saya mahu lakukan ialah menukarnya kepada sesuatu seperti ini: </p> <pre class="brush:php;toolbar:false;">test('boleh mendapatkan langganan terbaharu pelanggan', getLatestSubscription()); test('boleh mendapatkan langganan aktif pelanggan', getActiveSubscriptions()); fungsi getLatestSubscription() { /// kod fungsi di sini }); fungsi getActiveSubscriptions() { // kod fungsi di sini });</pre> <p>Walau bagaimanapun, fungsi ujian mengandungi rujukan kepada $this yang tersedia dalam penutupan biasa tetapi tidak dalam fungsi standard kerana saya menetapkannya di sana. </p> <p>Edit: Saya menggunakan pemalam perosak laravel - Saya tidak pasti sama ada ini mempunyai kesan ke atas penggunaan $this</p> <p>Adakah terdapat cara untuk menyelesaikan masalah ini? </p>
P粉831310404
P粉831310404

membalas semua(1)
P粉563446579

Terima kasih atas beberapa petua dalam balasan. Tidak sekemas yang saya harapkan, tetapi sekurang-kurangnya ini bermakna semua panggilan ujian ("keterangan ujian") berada di satu tempat di bahagian bawah fail 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);
});
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan