如何将函数从闭包转移到普通函数
P粉831310404
P粉831310404 2023-09-05 21:54:44
[PHP讨论组]
<p>我正在尝试使害虫测试文件更易于阅读。</p> <p>目前,我有一些标准测试:</p> <pre class="brush:php;toolbar:false;">test('can get subscribers latest subscription', function () { $this-&gt;seed(PlansTestSeeder::class); $this-&gt;seed(SubscriptionsTestSeeder::class); $this-&gt;assertDatabaseCount('plans', 2); $this-&gt;assertDatabaseCount('subscriptions', 0); Subscription::factory()-&gt;create([ &quot;plan_id&quot; =&gt; Plan::where(&quot;slug&quot;, &quot;bronze&quot;)-&gt;first()-&gt;id ]); Subscription::factory()-&gt;create([ &quot;plan_id&quot; =&gt; Plan::where(&quot;slug&quot;, &quot;silver&quot;)-&gt;first()-&gt;id ]); Subscription::factory()-&gt;create([ &quot;plan_id&quot; =&gt; Plan::where(&quot;slug&quot;, &quot;silver&quot;)-&gt;first()-&gt;id, &quot;status&quot; =&gt; &quot;expired&quot; ]); Subscription::factory()-&gt;trashed()-&gt;create(); $this-&gt;assertDatabaseCount('subscriptions', 4); }); test('can get subscribers active subscriptions', function () { $this-&gt;seed(PlansTestSeeder::class); $this-&gt;seed(SubscriptionsTestSeeder::class); $silverPlan = Plan::where(&quot;slug&quot;, &quot;silver&quot;)-&gt;first(); $subscription1 = Subscription::factory()-&gt;create([ &quot;plan_id&quot; =&gt; Plan::where(&quot;slug&quot;, &quot;silver&quot;)-&gt;first()-&gt;id, &quot;subscriber_id&quot; =&gt; 1, &quot;subscriber_type&quot; =&gt; &quot;ApresourcingFramework\Billing\Tests\Models\Subscriber&quot;, &quot;created_at&quot; =&gt; now()-&gt;subDays(2), &quot;started_at&quot; =&gt; now()-&gt;subDays(2) ]); $subscription2 = Subscription::factory()-&gt;create([ &quot;plan_id&quot; =&gt; $silverPlan-&gt;id, &quot;subscriber_id&quot; =&gt; 1, &quot;subscriber_type&quot; =&gt; &quot;ApresourcingFramework\Billing\Tests\Models\Subscriber&quot;, &quot;created_at&quot; =&gt; now()-&gt;subDays(1), &quot;started_at&quot; =&gt; now()-&gt;subDays(1) ]); $user = Subscriber::find(1); $subscription = $user-&gt;latestSubscription(); expect($subscription-&gt;id)-&gt;toBe($subscription2-&gt;id); });</pre> <p>但是为了提醒自己我编写了哪些测试,我必须一遍又一遍地上下滚动页面。</p> <p>我想做的是更改为如下内容:</p> <pre class="brush:php;toolbar:false;">test('can get subscribers latest subscription', getLatestSubscription()); test('can get subscribers active subscriptions', getActiveSubscriptions()); function getLatestSubscription() { /// function code here }); function getActiveSubscriptions() { // function code here });</pre> <p>但是,测试函数包含对 $this 的引用,它在正常闭包中可用,但在标准函数中不可用,因为我在此处设置了它。</p> <p>编辑:我正在使用 laravel pest 插件 - 我不确定这是否会对 $this 的使用产生影响</p> <p>有什么办法可以解决这个问题吗?</p>
P粉831310404
P粉831310404

全部回复(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);
});
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号