시드 도구를 실행하는 단위 테스트가 있습니다. 내 클래스 중 하나의 새 인스턴스를 생성하도록 생성했습니다. Artisan에서 시더를 실행할 때 문제없이 실행됩니다. 그러나, 단위 테스트를 수행 할 때 :Laravel Schema :: Unit Test에서 실행할 때 테이블 접두사를 무시하여 만듭니다.
class MyClassTest extends TestCase {
public function setUp() {
// Setup application
parent::setUp();
$this->seed('MyClassSeeder');
}
을 ... 실행됩니다 다음 비트는 접두사을 사용하기를 거부!
class MyClass extends Base {
// Switch to the proper DB prefix
protected function prefix() {
DB::connection('main')->setTablePrefix($this->id . '_');
return $this;
}
// This is run by the seeder, everything up to here works fine...
public function setupDatabase() {
$this->prefix();
// This returns "1001_", which is correct
Log::info(Schema::connection('main')->getConnection()->getTablePrefix());
// Creates "myTable" instead of "1001_myTable"
if(!Schema::connection('main')->hasTable('myTable')) {
Schema::connection('main')->create('myTable', function($table) {
...
수동으로 실행하면 정상적으로 작동하므로 어디서부터 시작해야할지 모르겠습니다. 올바른 접두어를 반환하는 것조차 사용하지 않고 있습니다. 다른 사람이 본 적이 있습니까? 재현 가능합니까? 테스트 환경 (자동으로 단위 테스트에 사용됨)이 이미 다시 활성화 된 필터 이외의 기능을 사용합니까?
도움을 주시면 감사하겠습니다. 적어도 복제물은 우리 코드가 아니라고 말합니다. 우리는 꽤 많이 확장되었지만 설치시 Laravel 코드베이스에는 큰 변화가 없어야합니다.
추가 시험
그래서 나는 내 테스트를 계속하고, 나는 그것을 더 들여다거야하지만, 나는 경우 여기를 게시하도록하겠습니다 그것이 누구의 메모리를 조그, 버그로 보이는 발견 유사한 문제에 대한 :
나는 것으로
Log::info(Schema::connection('main')->getConnection()->getTablePrefix());
을 수정
Log::info('Grammar Prefix: ' . Schema::connection('promotion')->getConnection()->getSchemaGrammar()->getTablePrefix());
Log::info('Connection Prefix: ' . Schema::connection('promotion')->getConnection()->getTablePrefix());
,
그리고 Connection Prefix 행은 이전과 같이 올바르게 작동하지만 문법의 Prefix는 존재하지 않습니다. 문법 및 연결 접두사가 일치하지 않습니다.이 문제를 해결할 수 있지만 단위 테스트 클래스가 아닌 다른 방식으로 실행하면 일관성이 유지되는 이유를 알고 싶습니다. 그러나 여기에는 불일치가 있습니다. 다른 사람에게 그렇게 보이는 경우 곧 버그로보고됩니다.
최종 테스트 나는 그것이 청사진 및 스키마를 모두 업데이트 된 접두사를 사용해야합니다 다음 데이터베이스 설정 파일, 그리고에서, 코드가 초기 설정을 얻어야한다 무엇을 말할 수에서
때 라인
DB::connection('promotion')->setTablePrefix($this->id . '_');
이 실행됩니다. 나는 또한 그 라인을 달려서 주위를 돌아 다녔다.
DB::connection('promotion')->getSchemaGrammar()->setTablePrefix($this->id . '_');
어느 것이 문제를 해결하는 것으로 보인다. 이것은 필요하지 않아야하며, 내가 사용하고있는 코드가 원하는 효과를 가져서는 안된다. 이 버그를 고려 중이며 오늘 나중에보고 할 것입니다. 내가 뭔가를 놓친 경우에 대비하여 질문을 공개적으로 남겨 두겠다.하지만 곧 끝낼 것이다.
왜 'promotion'연결에 대해 테이블 접두어를 설정하고 있는데 Schema에서 'main'연결을 사용하고 있습니까? –
실수로, 그들은 모두 내 코드에서 동일합니다. 단순함을 위해 이름이 변경되었습니다. – ahamilton9
$ this-> id는 어디에 지정되어 있습니까? 어떻게 설정 되나요? –