[英]PHPUnit/ Silverstripe Testing returns “Couldn't run query”, “Table doesn't exist”
[英]“Couldn't find object” error with Silverstripe 4 unit testing, how to fixed it?
Silverstripe 4單元測試中出現“找不到對象”錯誤,如何解決?
在silverstripe 4單元測試中,我收到一個錯誤“找不到對象'transaction1'”。 有人可以建議這里發生了什么嗎? 謝謝。
class CustomerCreditTransactionTest extends SapphireTest
{
protected static $fixture_file = BASE_PATH.'/mysite/code/CustomerCreditTransactionTest.yml';
/**
* @var string
*/
protected $readingmode = null;
/**
* Default reading mode
*
* @var string
*/
protected $defaultMode = null;
public function setUp()
{
$this->readingmode = 'Original';
$this->defaultMode = 'Original';
}
public function tearDown()
{
MirroredData::SetCurrentReadingStage($this->readingmode);
MirroredData::SetDefaultWritingStage($this->defaultMode);
}
public function testCustomerName()
{
$obj = $this->objFromFixture(CustomerCreditTransaction::class, 'transaction1');
$this->assertEquals(
'John@gmail.com',
$obj->CustomerName(),
'customer name is : '.$obj->CustomerName()
);
}
}
您將完全重載setUp
和tearDown
方法。 這些方法是SapphireTest處理夾具創建以及設置配置清單等的地方。因為您已經超載了它,所以測試將無法運行。
請改用此方法(請注意,也將它們更改為protected
可見性以匹配父類):
protected function setUp()
{
parent::setUp();
$this->readingmode = 'Original';
$this->defaultMode = 'Original';
}
protected function tearDown()
{
MirroredData::SetCurrentReadingStage($this->readingmode);
MirroredData::SetDefaultWritingStage($this->defaultMode);
parent::tearDown();
}
我看不到您的Fixture文件中有什么內容,因此我認為這沒問題,而問題僅在於未加載。
另一個建議:燈具文件也可以是相對文件路徑,因此您可以使用protected static $fixture_file = 'CustomerCreditTransactionTest.yml';
如果文件與測試類位於同一目錄中(如果您的燈具位於mysite/code
那么我認為它不存在,那么您可以忽略此建議)。 更改此設置不會影響您的測試,因為您所擁有的還可以,但是會使它的詳細程度降低一些。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.