Web Developer Hodory

[PHP] InvalidArgumentException : Unable to locate factory with name [default]

Laravel Framework로 TDD를 진행중에 Unit Test를 하기 위해 artisan 콘솔을 이용하여 TaskTest 라는 이름의 테스트 클래스를 생성하였습니다.

shellscript

$ php artisan make:test TaskTest --unit

코드는 간단했습니다.

php

<?php

namespace Tests\Unit;

use App\Project;
use Illuminate\Foundation\Testing\RefreshDatabase;
use PHPUnit\Framework\TestCase;

class TaskTest extends TestCase
{
    use RefreshDatabase;

    /**
     * @test
     */
    public function it_belongs_to_a_project()
    {
        $task = factory('App\Task')->create();
        $this->assertInstanceOf(Project::class, $task->project);
    }
}

해당 테스트를 생성 후 아래와 같이 PHPUnit으로 해당 테스트를 실행하였더니

shellscript

$ ./vendor/bin/phpunit --filter it_belongs_to_a_project

아래 이미지와 같은 에러가 나왔습니다.

과연 무엇이 문제일까 싶어 해당 모델의 migration이 제대로 안된걸까요?

[JS]jQuery 두번째 파라미터가 뭐지?

jQuery로 작성된 코드를 보는데, $("selectorA", "selectorB") 와 같은 코드가 있었습니다. 당연히 기존에 자주 접하던 $("selectorA, selectorB") 와 같은 코드인줄 알았으나, 예상과 다르게 동작하여 문서를 확인해 보았습니다.

jQuery 문서에 따르면, A DOM Element, Document, or jQuery to use as context 가 기재되어있다.

[JS]Object literal 보다 JSON.parse()가 더 빠르다


웹에서 몇 kb 크기의 객체를 초기에 렌더링 하는것은 생각보다 많습니다.

이 javascript 객체가 로드될때까지 클라이언트는 빈 화면을 보게 될 수 있습니다.

이러한 문제를 해결하기 위해, 서버사이드 렌더링을 활용 하는 방법도 있겠지만 다른 방법은 없을까요?

PHPUnit Annotation 정리


PHP Unit을 사용하면서도 잘 모르는 어노테이션을 PHPUnit v8.4 기준(2019-11-19 최신버전)으로 정리하였습니다.


@group 어노테이션의 별칭으로, 테스트를 작성자별로 그룹화하여 필터링 하는데 사용할 수 있습니다.


각 테스트 메소드들이 실행 된 후, 특정 메소드를 실행하고자 할때 사용할 수 있습니다.

각 테스트가 끝난 뒤 트랜잭션 커밋or롤백을 한다거나, 생성된 파일을 삭제하는 등의 처리를 하는데 사용하면 좋을 것 같습니다.

namespace Tests;

use PHPUnit\Framework\TestCase;

class MyTest extends TestCase
{
    /**
     * @after
     */
    public function afterDo()
    {
        echo "After Method Called" . PHP_EOL;
    }

    public function test1()
    {
        echo "test1 Method Called" . PHP_EOL;
        self::assertTrue(true);
    }

    public function test2()
    {
        echo "test2 Method Called" . PHP_EOL;
        self::assertTrue(true);
    }
}

// 출력 결과
test1 Method Called
After Method Called
test2 Method Called
After Method Called
```