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:

  SQL (0.1ms)   BEGIN
  Department Columns (2.1ms)   SHOW FIELDS FROM
`departments`
  SQL (0.1ms)   SAVEPOINT active_record_1
  Department Create (0.3ms)   INSERT INTO `departments`
(`name`, `created_at`, `updated_at`) VALUES(NULL, '2009-12-29 14:53:54',
'2009-12-29 14:53:54')
  SQL (0.1ms)   RELEASE SAVEPOINT active_record_1
  SQL (0.1ms)   SAVEPOINT active_record_1
  Department Update (0.3ms)   UPDATE `departments` SET
`updated_at` = '2009-12-29 14:53:55', `name` = 'Hola' WHERE `id` = 10
  SQL (0.1ms)   RELEASE SAVEPOINT active_record_1
  Department Load (0.2ms)   SELECT * FROM `departments`
WHERE (`departments`.`name` = 'Hola') LIMIT 1
  Person Columns (2.4ms)   SHOW FIELDS FROM `people`
  SQL (0.5ms)   SAVEPOINT active_record_1
  Person Create (0.3ms)   INSERT INTO `people` (`name`,
`created_at`, `updated_at`) VALUES(NULL, '2009-12-29 14:53:57', '2009-12-29
14:53:57')
  SQL (0.1ms)   RELEASE SAVEPOINT active_record_1
  SQL (0.1ms)   SAVEPOINT active_record_1
  Person Update (0.2ms)   UPDATE `people` SET
`updated_at` = '2009-12-29 14:53:57', `name` = 'Hola' WHERE `id` = 10
  SQL (0.1ms)   RELEASE SAVEPOINT active_record_1
  Person Load (0.3ms)   SELECT * FROM `people` WHERE
(`people`.`name` = 'Hola') LIMIT 1
  SQL (16.0ms)   ROLLBACK

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

Responder a