After replying to Ralf, I dropped everything in my 'test' database, and 
went back to the code I had before, " $myModel->save(...)".  Now, I'm 
seeing something else:

   - The page displays a PDOException " SQLSTATE[23000]: Integrity 
   constraint violation: 1062 Duplicate entry '' for key 1 "
   - The error_log displays the MissingActionException.
   
I find it frustrating that:

   - The message for PDOException doesn't tell me what query was run (since 
   it was composed inside Cake's core).
   - The output from MissingActionException shows what action is missing, 
   "Action AppController::webroot() could not be found", but not where the 
   request got generated and sent
   

On Tuesday, July 24, 2012 8:25:33 AM UTC-4, lsiden wrote:
>
> Stuff, more stuff, and stuff to change.  I want to avoid cluttering the 
> post with too much detail that will make people's eyes glaze over.  
>
> What I should do when I have time is clone the database schema, eliminate 
> anything non-relevant, repopulate it with "lorem ipsum" to satisfy my 
> client that I'm not disclosing anything proprietary, and see if I can 
> recreate it.  Then I can post it on Github.
>
> I did find something suspicious that make me think that this is related to 
> fixtures: My test pulls in six fixtures, but when I look at my 'test' 
> database, only one fixture table has been created, the one corresponding to 
> "stuff_to_change".  When I open it's class file, it's the only one that I 
> didn't define "public $records = ...".  
>
> According to http://book.cakephp.org/2.0/en/development/testing.html:
>
> CakePHP performs the following during the course of a fixture based test 
>> case:
>> Creates tables for each of the fixtures needed.
>> Populates tables with data, if data is provided in fixture.
>> Runs test methods.
>> Empties the fixture tables.
>> Removes fixture tables from database.
>
> So it makes me suspicious that a table still remains in the test database 
> after the test runner is finished.
> Every time I run a test, I've been seeing the following stack trace in my 
> error_log:
>
> 2012-07-23 19:37:52 Error: [MissingActionException] Action 
>> AppController::webroot() could not be found.
>> #0 /opt/cakephp_2.0/lib/Cake/Routing/Dispatcher.php(186): 
>> Controller->invokeAction(Object(CakeRequest))
>> #1 /opt/cakephp_2.0/lib/Cake/Routing/Dispatcher.php(161): 
>> Dispatcher->_invoke(Object(AppController), Object(CakeRequest), 
>> Object(CakeResponse))
>> #2 /opt/csw/apache2/share/htdocs/kaos/app/webroot/index.php(93): 
>> Dispatcher->dispatch(Object(CakeRequest), Object(CakeResponse))
>> #3 {main}
>
>
> I already created a ticket for this, but kept going because I didn't think 
> it was related.  The page comes up normally after a test is run.  Now I 
> wonder if this exception is hiding some other problem.
>
> On Tuesday, July 24, 2012 2:22:51 AM UTC-4, Ralf Rottmann wrote:
>>
>> What is in the 'Stuff', 'MoreStuff' and 'StuffToChange' arrays?
>>
>> On Tuesday, July 24, 2012 2:05:40 AM UTC+2, lsiden wrote:
>>>
>>> I created a component test that modifies and saves a model with HABTM 
>>> associated data.   
>>>
>>> Before I upgraded to CakePHP 2.0, I tried to accomplish this with 
>>> unbindModel() all over my code, but wanted to try something a little 
>>> cleaner albeit less efficient.  I spent hours reading  
>>> http://book.cakephp.org/2.0/en/models/saving-your-data.html and wanted 
>>> to try doing it the "Cake" way: 
>>>
>>> $data = array(
>>>>   'User' => array(
>>>>     'id' => 99,
>>>>     ...
>>>>   ),
>>>>   'Stuff' => array( ... some stuff ...),
>>>>   'MoreStuff => array( .. more stuff ...),
>>>>   'StuffToChange' => array( ... this is the stuff I added a record to 
>>>> ...)
>>>> );
>>>
>>>
>>> When I look at the query log, Cake generated queries to delete Stuff, 
>>> MoreStuff, and ReallyImportantStuff, but only does inserts into 
>>> StuffToChange.
>>>
>>> I'm wondering if this is somehow related to the fact that I'm using 
>>> fixtures in my test.  I suppose I could clone the real database and try it 
>>> on that to see if its a fixture problem.  (I'm too exhausted now to try 
>>> anything.  I need a break!)  
>>>
>>> So in order to make progress I had to give up for now and do it the 
>>> "brute force" (but much more effiicient way):
>>>
>>> $model->query("insert into stuff_to_change where user_id=99 and 
>>>> something_id=xxx")
>>>
>>>
>>> I suppose Cake purists will tell me that this is wrong and could create 
>>> problems in the future if I were to migrate the data to a different 
>>> database platform, for example, but I wasted half a day trying to get this 
>>> to work and I can't afford to spend much more time when I have a 
>>> functioning workaround.  Even if it turns out to be an issue that will only 
>>> happen when I use my fixtures, I want it to work the same way in a unit 
>>> test as it works in the field.
>>>
>>> Anyone else having this problem in Cake 2.x?  (I'm actually in the 
>>> master branch from the Git repo - yeah, I'm bleeding edge now).
>>>
>>

-- 
Our newest site for the community: CakePHP Video Tutorials 
http://tv.cakephp.org 
Check out the new CakePHP Questions site http://ask.cakephp.org and help others 
with their CakePHP related questions.


To unsubscribe from this group, send email to
[email protected] For more options, visit this group at 
http://groups.google.com/group/cake-php

Reply via email to