Hello,
We had the same problem and we end up by calling

./symfony doctrine:data-load --dir="test/fixtures"  frontend

The annoying thing is that the symfony::data-load task called the
Doctrine::loadData
method... so you might expect the same result when calling it from your own
task.

Now, I "think" the problem come from the class loading process. If you
call Doctrine::loadData
directly it seems that doctrine ignores or behaves weirdly if it does not
know about a relation class.

Have you try ... *shame on me* ... to paste-and-copy the load data symfony
task into your loadData function ?


On Tue, Sep 22, 2009 at 6:49 PM, Tom Boutell <t...@punkave.com> wrote:

>
> I'm using functional tests in my Doctrine-based project.
>
> One of the first steps is generally to load the fixtures data.
>
> We've been using a loadData method like this in our functional test class:
>
> public function loadData()
>  {
>    Doctrine::loadData(sfConfig::get('sf_data_dir').'/fixtures');
>
>    return $this;
>  }
>
> It seems OK at first, but there's a problem: it doesn't know about
> plugins. If you are testing functionality that expects data that gets
> loaded from plugin fixture files, you're out of luck. This is a
> problem because functional tests should be able to easily test the
> site with its real fixtures. Although it is nice that you can take
> advantage of load_data to purposely load alternate testing-only
> fixtures when you actually want that.
>
> I rummaged through sfDoctrineBaseTask and borrowed most of this from there:
>
>  public function loadData()
>  {
>    $fixtures = array();
>    $fixtures[] = sfConfig::get('sf_data_dir').'/fixtures';
>    $configuration = sfContext::getInstance()->getConfiguration();
>    $pluginPaths = $configuration->getPluginPaths();
>    foreach ($pluginPaths as $pluginPath)
>    {
>      if (is_dir($dir = $pluginPath.'/data/fixtures'))
>      {
>        $fixtures[] = $dir;
>      }
>    }
>
>    $append = false;
>    foreach ($fixtures as $fixture)
>    {
>      echo("Loading file $fixture\n");
>      Doctrine::loadData($fixture, $append);
>      $append = true;
>    }
>
>    return $this;
>  }
>
> This seems like it ought to reproduce what the data-load task does,
> but I get validation errors:
>
>  Doctrine_Validator_Exception: Validation failed in class pkContextCMSPage
>
>  1 field had validation error:
>
>    * 1 validator failed on slug (unique)
>
> Which I *don't* get if I simply call:
>
> ./symfony doctrine:data-load --env=test
>
> Finally I wrote this version:
>
>  public function loadData()
>  {
>    system(escapeshellarg(sfConfig::get('sf_root_dir') . '/symfony') .
> ' doctrine:data-load --env=test', $result);
>    if ($result !== 0)
>    {
>      die("Error loading data");
>    }
>    return $this;
>  }
>
> That, unsurprisingly, does work. It's probably fine for Unix, it would
> need work in a Windows environment (not a problem for me).
>
> I considered "just calling" the doctrine:data-load task, but calling a
> task from PHP seems to be easy only if you're calling *from* a task
> and already have the "dispatcher" and "formatter" objects ready to
> pass, whatever those might be.
>
> Is my workaround the best that can be done or is there a
> straightforward way to call the task?
>
> --
> Tom Boutell
> P'unk Avenue
> 215 755 1330
> punkave.com
> window.punkave.com
>
> >
>


-- 
Thomas Rabaix
http://rabaix.net

--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups 
"symfony users" group.
To post to this group, send email to symfony-users@googlegroups.com
To unsubscribe from this group, send email to 
symfony-users+unsubscr...@googlegroups.com
For more options, visit this group at 
http://groups.google.com/group/symfony-users?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to