Laravel setUpBeforeClass上的PHPUnit找不到工厂类

时间:2019-03-15 01:23:15

标签: laravel phpunit phpunit-testing

我正在尝试运行单元测试,以便在测试运行之前将数据输入数据库。我定义了一种设置方法,该方法可针对每个我不想要的测试用例运行。设置方法执行正常,没有问题。我想要的是将数据一次输入数据库,然后供所有测试用例使用。因此,我设置了一个静态函数setUpBeforeClass。

function parseData() {
    var form = formID;

    //list of divs with this class name - dynamically added
    var infoDivs = form.getElementsByClassName( "actorInfoDiv" );
    var info = [];

    //loop through each div and append the raw data
    for ( i = 0; i < infoDivs.length; i++ ) {
        info.push( [ ...infoDivs[ i ].getElementsByClassName( "actorInfo" ) ] );
    }

    //extract the value of the input from the raw data
    var extractedInfo = [];
    for ( j = 0; j < info.length; j++ ) {
        var ind = [];
        for ( k = 0; k < info[ j ].length; k++ ) {
            ind.push( info[ j ][ k ].value );
        }
        extractedInfo.push( ind );
    }

    //  $.post('/summary.php',{array: JSON.stringify(extractedInfo)}); - first attepmt
    console.log( extractedInfo );

    //POST to PHP
    request = new XMLHttpRequest();
    request.open( "POST", "summary.php", true );
    request.setRequestHeader( "Content-type", "application/json" );
    request.send( JSON.stringify( extractedInfo ) );
}

document.getElementById("dataForm").addEventListener("submit", e => {
    e.preventDefault();
    parseData();
});

调用用户工厂类时,出现以下错误:

InvalidArgumentException:无法找到名称为[default] [App \ User]

的工厂

UserFactory.php文件存在于database / factories / UserFactory.php

public static function setUpBeforeClass() : void {
    parent::setUpBeforeClass();
    static::$journalOption = new JournalOption;
    $this->user = factory(User::class)->create();


}

1 个答案:

答案 0 :(得分:0)

factory函数无法在您的setUpBeforeClass函数中正常运行,因为运行该函数时该应用程序尚未启动。您可以引导应用程序并在setUpBeforeClass函数中运行迁移,但我不建议这样做。

通常,您应该单独创建每个测试所需的数据,以防其他测试修改或删除数据,或具有其他意外的副作用。因此,最好将工厂保留在setup()函数中。如果您担心污染数据库,可以使用内存中的SQLite数据库进行测试。