我正在尝试运行单元测试,以便在测试运行之前将数据输入数据库。我定义了一种设置方法,该方法可针对每个我不想要的测试用例运行。设置方法执行正常,没有问题。我想要的是将数据一次输入数据库,然后供所有测试用例使用。因此,我设置了一个静态函数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();
}
答案 0 :(得分:0)
factory
函数无法在您的setUpBeforeClass
函数中正常运行,因为运行该函数时该应用程序尚未启动。您可以引导应用程序并在setUpBeforeClass
函数中运行迁移,但我不建议这样做。
通常,您应该单独创建每个测试所需的数据,以防其他测试修改或删除数据,或具有其他意外的副作用。因此,最好将工厂保留在setup()
函数中。如果您担心污染数据库,可以使用内存中的SQLite数据库进行测试。