محسن بستان
4 سال پیش توسط محسن بستان مطرح شد
5 پاسخ

نوشتن تست برای کد غیر قابل تست

سلام.
اخیرا من یک پکیج منتشر کردم اما مشکلی که وجود داره، اینه که بعد از روز ها کار کردن راهی برای نوشتن تست برای متد های پکیج پیدا نکردم :(
پکیج من یک کلاس اصلی داره که شامل 3 متد به صورت استاتیک میشه. متد شماره 3 رو به راحتی میشه تست کرد اما متاسفانه برای بقیه متد ها هیچ راهی پیدا نکردم.
خوشحال میشم اگر کسی میتونه یه نگاهی به متد ها بندازه و اگر ایده برای تست اونها داره بهم بگه.
متد هایی که به تست نیاز دارن، دو متد زیر هستن:

https://github.com/mohsenbostan/laravel-secret-image


ثبت پرسش جدید
محسن بستان
تخصص : Senior Backend Developer
@mohsenbostan 4 سال پیش مطرح شد
1

@mohammadeng3731
مشکل حل شد :)
یادم نبود که ورودی رو تغییر دادم. قبلا یک شئ از Request می خواستم ولی الان که UploadFile هستش به راحتی میشه از fake استفاده کرد.


محمد امیری
تخصص : backend coder
@mohammadeng3731 4 سال پیش مطرح شد
0

سلام.
بخش mocking بخش storage testing اون رو مطالعه کردی تو مستندات؟ به نظرم یه نگاه بهش بنداز


محسن بستان
تخصص : Senior Backend Developer
@mohsenbostan 4 سال پیش مطرح شد
0

@mohammadeng3731
ورودی که دریافت می کنم UploadFile هستش نه فایل به خاطر همین این طوری نمیشه.


محسن بستان
تخصص : Senior Backend Developer
@mohsenbostan 4 سال پیش مطرح شد
1

@mohammadeng3731
مشکل حل شد :)
یادم نبود که ورودی رو تغییر دادم. قبلا یک شئ از Request می خواستم ولی الان که UploadFile هستش به راحتی میشه از fake استفاده کرد.


محمد امیری
تخصص : backend coder
@mohammadeng3731 4 سال پیش آپدیت شد
1

آره خب.منم از fake استفاده میکنم کلا همه از fake استفاده میکنن.البته خود builtin که داخل phpunit هستش از بره لاراول بهتره فقط لاراول کلاس UploadFile ش خیلی خوبه برای درست کردن فایل fake. کدای من اینجوریه:

 $file = UploadedFile::fake()->image('image.jpg');

        $this->post('/', [
            'file' => $file,
            '_token' => csrf_token()
        ]);

        $this->assertFileExists(storage_path('app/file/'.$file->getClientOriginalName()));

اونورم اینجوری بزنم تستم pass میشه:

     request()->file('file')->storeAs('file/',request()->file('file')->getClientOriginalName(),'local');

بره حذف فایل هم از $this->assertFileDoesntExist($path) استفاده میکنم همین و بس

اگه روش باحال تری پیدا کردی الان بذا استفاده کنیم :)


محسن بستان
تخصص : Senior Backend Developer
@mohsenbostan 4 سال پیش مطرح شد
0

@mohammadeng3731
متد موجود در کلاس:

     /**
     * Save Single Image
     * @param UploadedFile $image
     * @param string $path
     * @param null $newImageName
     * @return false|string
     */
    public static function saveSingleImage(UploadedFile $image, $path = 'secret-image', $newImageName = null): string
    {
        if (Str::substr($path, 0, 6) !== 'public') {

            $storage_driver = config('laravel-secret-image.storage_driver');

            return is_null($newImageName)
                ? Storage::disk($storage_driver)->putFile($path, $image)
                : Storage::disk($storage_driver)->putFileAs($path, $image, $path, $newImageName . '.' . $image->getClientOriginalExtension());
        }

        throw new HttpException(422, 'the provided path is not secret. Please remove the `public` from the beginning.');
    }

یکی از تست هایی که برای این متد نوشتم:

    /** @test */
    public function it_can_save_single_secret_image_with_custom_path()
    {
        $storage_driver = config('laravel-secret-image.storage_driver');
        $image = UploadedFile::fake()->image('test.jpg');
        $path = 'test-secret-image';
        $save_image = LaravelSecretImage::saveSingleImage($image, $path);
        Storage::disk($storage_driver)->assertExists($save_image);
        self::assertStringContainsString($path, $save_image);
    }

برای ارسال پاسخ لازم است وارد شده یا ثبت‌نام کنید

ورود یا ثبت‌نام