diff --git a/control/injector/Injector.php b/control/injector/Injector.php index 96c69854b..3ab429a29 100644 --- a/control/injector/Injector.php +++ b/control/injector/Injector.php @@ -866,7 +866,7 @@ class Injector { return $this->instantiate($spec, $name); } - return $this->instantiate($spec); + return $this->instantiate($spec, null, 'prototype'); } /** diff --git a/tests/model/DataObjectTest.php b/tests/model/DataObjectTest.php index e4fdb953e..ca51d30dc 100644 --- a/tests/model/DataObjectTest.php +++ b/tests/model/DataObjectTest.php @@ -39,6 +39,13 @@ class DataObjectTest extends SapphireTest { */ public function testSingleton($inst, $defaultValue, $altDefaultValue) { + // Calls to scaffold the test database may have cached service specs for DataObjects + // with the incorrect 'type' set (singleton instead of prototype) + Injector::nest(); + $reflectionProp = new ReflectionProperty('Injector', 'specs'); + $reflectionProp->setAccessible(true); + $reflectionProp->setValue(Injector::inst(), array()); + $inst = $inst(); // Test that populateDefaults() isn't called on singletons // which can lead to SQL errors during build, and endless loops @@ -53,6 +60,8 @@ class DataObjectTest extends SapphireTest { } else { $this->assertEmpty($inst->MyFieldWithAltDefault); } + + Injector::unnest(); } public function provideSingletons()