Jajaja, NachoKB tenés razón. Acabo de ver el test.log (buena idea Maxi!). Hace un *begin*, luego ejecuta todas las consultas, y luego hace un * rollback*. Está todo dentro de la transaction, pero es medio raro no? Porque lo que inserte en mi transaction puedo accederlo con un select dentro de la transaction, pero si lo hago desde la consola no puedo accederlo, porque no estoy dentro del transaction scope no?
Les dejo acá el log para que saquen sus conclusiones: [4;36;1mSQL (0.1ms)[0m [0;1mBEGIN[0m [4;35;1mDepartment Columns (2.1ms)[0m [0mSHOW FIELDS FROM `departments`[0m [4;36;1mSQL (0.1ms)[0m [0;1mSAVEPOINT active_record_1[0m [4;35;1mDepartment Create (0.3ms)[0m [0mINSERT INTO `departments` (`name`, `created_at`, `updated_at`) VALUES(NULL, '2009-12-29 14:53:54', '2009-12-29 14:53:54')[0m [4;36;1mSQL (0.1ms)[0m [0;1mRELEASE SAVEPOINT active_record_1[0m [4;35;1mSQL (0.1ms)[0m [0mSAVEPOINT active_record_1[0m [4;36;1mDepartment Update (0.3ms)[0m [0;1mUPDATE `departments` SET `updated_at` = '2009-12-29 14:53:55', `name` = 'Hola' WHERE `id` = 10[0m [4;35;1mSQL (0.1ms)[0m [0mRELEASE SAVEPOINT active_record_1[0m [4;36;1mDepartment Load (0.2ms)[0m [0;1mSELECT * FROM `departments` WHERE (`departments`.`name` = 'Hola') LIMIT 1[0m [4;35;1mPerson Columns (2.4ms)[0m [0mSHOW FIELDS FROM `people`[0m [4;36;1mSQL (0.5ms)[0m [0;1mSAVEPOINT active_record_1[0m [4;35;1mPerson Create (0.3ms)[0m [0mINSERT INTO `people` (`name`, `created_at`, `updated_at`) VALUES(NULL, '2009-12-29 14:53:57', '2009-12-29 14:53:57')[0m [4;36;1mSQL (0.1ms)[0m [0;1mRELEASE SAVEPOINT active_record_1[0m [4;35;1mSQL (0.1ms)[0m [0mSAVEPOINT active_record_1[0m [4;36;1mPerson Update (0.2ms)[0m [0;1mUPDATE `people` SET `updated_at` = '2009-12-29 14:53:57', `name` = 'Hola' WHERE `id` = 10[0m [4;35;1mSQL (0.1ms)[0m [0mRELEASE SAVEPOINT active_record_1[0m [4;36;1mPerson Load (0.3ms)[0m [0;1mSELECT * FROM `people` WHERE (`people`.`name` = 'Hola') LIMIT 1[0m [4;35;1mSQL (16.0ms)[0m [0mROLLBACK[0m Ahora yo básicamente lo que quería testear era que en mi tabla intermedia department_people se estuvieran ingresando registros. Cosa que puedo hacer simplemente viendo el log. Gracias! El 29 de diciembre de 2009 12:53, NachoKB <[email protected]> escribió: > 2009/12/29 Maximiliano Guzman <[email protected]> > > -si el assert dió OK, es porque encontró los datos en la BD. En todo caso, >> agregá una llamada al debugger adentro del test y probá desde ahí. Para >> llamar al debugger: >> >> require 'ruby-debug' >> debugger >> > > Creo que no ves nada por que todos los tests se ejecutan dentro de una > transaction (al menos en algunos motores). > > Aprovecho lo que dice Maximiliano para pasarte una prueba para que te > convenzas de que realmente todo llega a la base: > > - agregá en medio de tu test "require 'ruby-debug'; debugger" (luego de > haber insertado algo en la base) > - corré el test > - cuando se detenga y te muestre el prompt del debugger, ejecutá esto: > - ActiveRecord::Base.connection.execute "COMMIT" > - antes de continuar con los tests (va a explotar todo), fijate en la > base, tenés que ver tus datos > > Yo te puedo asegurar que cuando AR recibe un Department.find_by_blabla no > cachea objetos (lamentablemente jaja), siempre va a la base... > > Nacho > > _______________________________________________ > Ruby mailing list > [email protected] > http://lista.rubyargentina.com.ar/listinfo.cgi/ruby-rubyargentina.com.ar > >
_______________________________________________ Ruby mailing list [email protected] http://lista.rubyargentina.com.ar/listinfo.cgi/ruby-rubyargentina.com.ar
