This small PHPSpec extension allows you to test Magento 2.0 modules much more easier by utilizing generators of Magento\Framework\ObjectManager.
Reasons why not to use ObjectManager in PHPSpec examples:
- It is heavy and requires stubbing full file system in order to run a simple spec example.
 - Depending on ObjectManager is a bad idea, as you don't want to test some-else DI overrides.
 - Simple modules that do not require database do not need fully functional object manager
 - Adapting your business logic to another framework will require from you only to materialize generated classes, instead of depending on the whole ObjectManager library.
 
- Factory
 - Repository
 - Converter
 - Persistor
 - Mapper
 - SearchResults
 
- 
Install via composer
composer require --dev ecomdev/phpspec-magento-di-adapter
 - 
Add to your phpspec.yml
extensions: - EcomDev\PHPSpec\MagentoDiAdapter\Extension
 
Make sure that when you write examples to specify fully qualified class name for auto-generated class.
<?php
namespace spec\Acme\CustomMagentoModule\Model;
use Magento\Catalog\Model\Product;
use PhpSpec\ObjectBehavior;
use Prophecy\Argument;
class ProductManagerSpec extends ObjectBehavior
{
    private $productFactory; 
    
    function let(ProductFactory $factory) {
        $this->productFactory = $factory;    
        $this->beConstructedWith($factory);
    }
    
    function it_creates_items_via_product_factory(Product $product)
    {
        $this->productFactory->create()->willReturn($product)->shouldBeCalled();
        $this->someCreationLogic();
    }
}This approach will not get you a desired result, as PHP by default looks for undefined classes within the same namespace.
So instead of Magento\Catalog\Model\ProductFactory it will generate a class spec\Acme\CustomMagentoModule\Model\ProductFactory, that is definitely not a desired behavior.
In order to fix that make sure to specify fully qualified name in method signature or via use operator in the file header.
<?php
namespace spec\Acme\CustomMagentoModule\Model;
use Magento\Catalog\Model\Product;
use Magento\Catalog\Model\ProductFactory; // This class will be automatically generated
use PhpSpec\ObjectBehavior;
use Prophecy\Argument;
class ProductManagerSpec extends ObjectBehavior
{
    private $productFactory; 
    
    function let(ProductFactory $factory) {
        $this->productFactory = $factory;    
        $this->beConstructedWith($factory);
    }
    
    function it_creates_items_via_product_factory(Product $product)
    {
        $this->productFactory->create()->willReturn($product)->shouldBeCalled();
        $this->someCreationLogic();
    }
}Make a pull request based on develop branch