클로저에서 일반 기능으로 기능을 이동하는 방법
P粉831310404
2023-09-05 21:54:44
<p>저희는 尝试使害虫测试文件更易于阅读。</p>
<p>目前,我有一些标准测试:</p>
<pre class="brush:php;toolbar:false;">test('구독자의 최신 구독을 얻을 수 있습니다.', function () {
$this->seed(PlansTestSeeder::class);
$this->seed(SubscriptionsTestSeeder::class);
$this->assertDatabaseCount('계획', 2);
$this->assertDatabaseCount('구독', 0);
구독::factory()->create([
"계획_ID" => 계획::where("슬러그", "브론즈")->first()->id
]);
구독::factory()->create([
"계획_ID" => 계획::where("슬러그", "실버")->first()->id
]);
구독::factory()->create([
"계획_ID" => 계획::where("슬러그", "실버")->first()->id,
"상태" => '만료됨'
]);
구독::factory()->trashed()->create();
$this->assertDatabaseCount('구독', 4);
});
test('구독자의 활성 구독을 얻을 수 있습니다.', function () {
$this->seed(PlansTestSeeder::class);
$this->seed(SubscriptionsTestSeeder::class);
$silverPlan = 계획::where("슬러그", "실버")->first();
$subscription1 = 구독::factory()->create([
"계획_ID" => 계획::where("슬러그", "실버")->first()->id,
"구독자_ID" => 1,
"구독자_유형" => "ApresourcingFrameworkBillingTestsModelsSubscriber",
"created_at" => now()->subDays(2),
"시작_시간" => now()->subDays(2)
]);
$subscription2 = 구독::factory()->create([
"계획_ID" => $silverPlan->id,
"구독자_ID" => 1,
"구독자_유형" => "ApresourcingFrameworkBillingTestsModelsSubscriber",
"created_at" => now()->subDays(1),
"시작_시간" => now()->subDays(1)
]);
$user = 구독자::find(1);
$subscription = $user->latestSubscription();
기대($subscription->id)->toBe($subscription2->id);
});</pre>
<p>但是为了提醒自己我编写了哪些测试, 我必须一遍又一遍地上下滚动页面.</p>
<p>제가 원하는 것은 다음과 같이 변경하는 것입니다:</p>
<pre class="brush:php;toolbar:false;">test('구독자의 최신 구독을 얻을 수 있습니다.', getLatestSubscription());
test('구독자의 활성 구독을 얻을 수 있습니다.', getActiveSubscriptions());
함수 getLatestSubscription() {
/// 여기에 함수 코드가 있습니다.
});
함수 getActiveSubscriptions() {
// 여기에 함수 코드가 있습니다.
});</pre>
<p>그러나 테스트 함수에는 일반 클로저에서는 사용할 수 있지만 표준 함수에서는 사용할 수 없는 $this에 대한 참조가 포함되어 있습니다. </p>
<p>편집: 저는 laravel pest 플러그인을 사용하고 있습니다. 이것이 $this</p> 사용에 영향을 미치는지 잘 모르겠습니다.
<p>이 문제를 해결할 수 있는 방법이 있나요? </p>
답변에 몇 가지 팁을 제공해 주셔서 감사합니다. 기대했던 것만큼 깔끔하지는 않지만 적어도 모든 테스트("테스트 설명") 호출이 PHP 파일 하단의 한 위치에 있다는 의미입니다.
으아악