Это не очень хорошо, но Apple Testing Kit разбивает модульные тесты на две отдельные категории:
Логические тесты
Эти тесты проверяют правильность работы вашего кода в чистых помещениях.
Тесты приложений
Эти тесты проверяют функциональность вашего кода в работающем приложении.
Похоже, существует много кода, связанного с пользовательским интерфейсом, который не может быть запущен в случае «логического теста». Больше информации о тестах логики и тестах приложений здесь.
Примечания здесь помогли мне запустить это. Поэтому я подумал, что поделюсь с вами кодом для добавления простого продукта к существующему настраиваемому продукту.
Этот код предполагает, что простой продукт можно добавить, я не уверен, что бы произошло, если бы это было не так.
private function _attachProductToConfigurable( $_childProduct, $_configurableProduct ) {
$loader = Mage::getResourceModel( 'catalog/product_type_configurable' )->load( $_configurableProduct );
$ids = $_configurableProduct->getTypeInstance()->getUsedProductIds();
$newids = array();
foreach ( $ids as $id ) {
$newids[$id] = 1;
}
$newids[$_childProduct->getId()] = 1;
$loader->saveProducts( $_configurableProduct->getId(), array_keys( $newids ) );
}
Я это необоснованное предположение, но я думаю, что то, что вы просите, может не может быть сделано с существующим API. Вам придется написать свой собственный или просто попал прямо в БД.
Я работаю над этим прямо сейчас.
На данный момент я нашел эти элементы полезными в качестве ссылок:
Я пока опубликую свой код и, надеюсь, обновлю его, когда он заработает ..
// Set 'item_size' as the super attribute # choose your own attribute!
// this is the 'choose-able' field that differenciates products
$super_attributes=array( Mage::getModel('eav/entity_attribute')
->loadByCode('catalog_product','item_size')
->getData('attribute_id')
);
$product_collection=Mage::getModel('catalog/product')->getCollection();
// Fetch configurable orders
$product_collection->addFieldToFilter('type_id',Array('eq'=>"configurable"));
#$product_collection->addFieldToFilter('sku',Array('eq'=>"ASMCL000002"));
$product_collection->addAttributeToSelect('*');
$count=0;
foreach($product_collection as $product) {
$sku = $product->getSku();
echo "SKU: $sku\n";
$simple_children_collection = Mage::getModel('catalog/product')->getCollection();
$simple_children_collection->addAttributeToSelect('*');
$simple_children_collection->addFieldToFilter('sku',Array('like'=>$sku . "-%"));
echo "children: ";
foreach($simple_children_collection as $child) {
$child_sku = $child->getSku();
echo "$child_sku ";
#visiblity should be 'nowhere'
}
echo "\n";
if (!$product->getTypeInstance()->getUsedProductAttributeIds()) {
# This is a new product without the Configurable Attribue Ids set
$product->getTypeInstance()
->setUsedProductAttributeIds( $super_attributes );
//$product->setConfigurableAttributesData(array($_attributeData));
$product->setCanSaveConfigurableAttributes(true); # Not sure if this is needed.
$product->setConfigurableProductsData(''); # Use this to add child products.
}
$count++;
try {
$product->save();
$productId = $product->getId();
echo $product->getId() . ", $sku updated\n";
}
catch (Exception $e){
echo "$sku not added\n";
echo "exception:$e";
}
}
echo "\nCount is $count\n";
Хорошо, здесь используется 'item_size' как атрибут, который отличает "простой" продукты. Также предполагается, что «настраиваемый» родительский SKU является корнем дочернего SKU. Например, ABC001 - родитель, а ABC001-SMALL и ABC001-LARGE - простые дети.
Надеюсь, что это кому-то поможет.