Nuevo con Pruebas Unitarias

4 views
Skip to first unread message

Johan Donado B.

unread,
Oct 11, 2018, 2:37:29 PM10/11/18
to ror-es

Saludos.

Estoy aprendiendo el tema de las pruebas unitarias en Rails.  

Alguien podría por favor ayudarme con estos errores que salen al momento de ejecutar mis pruebas.  No sé qué revisar.

Gracias de antemano.

rake test

Run options: --seed 42414


# Running:

E

Error:
NinoninoControllerTest#test_should_get_index:
ActiveRecord::ValueTooLong: Mysql2::Error: Data too long for column 'codigo_departamento' at row 1: INSERT INTO `municipios` (`codigo`, `nombre`, `created_at`, `updated_at`, `id`, `codigo_departamento`) VALUES ('001', 'MyString', '2018-10-11 18:08:52', '2018-10-11 18:08:52', 980190962, '980190962')

bin
/rails test test/controllers/ninonino_controller_test.rb:4



La lista de errores sigue, pero son básicamente el mismo error.

grupo_controller_test.rb

require 'test_helper'


class GruposControllerTest < ActionDispatch::IntegrationTest
  setup
do
   
@grupo = grupos(:one)
 
end


  test
"should get index" do
   
get grupos_url
    assert_response
:success
 
end

(...)

end


municipios.yml

one:
  departamento
: one
  codigo
: '001'
  nombre
: MyString


two
:
  departamento
: two
  codigo
: '002'
  nombre
: MyString



departamentos.yml

one:
  codigo
: '01'
  nombre
: MyString


two
:
  codigo
: '02'
  nombre
: MyString



schema.rb

ActiveRecord::Schema.define(version: 20180929202221) do


  create_table
"departamentos", force: :cascade, options: "ENGINE=InnoDB DEFAULT CHARSET=utf8" do |t|
    t
.string "codigo", limit: 2
    t
.string "nombre"
    t
.datetime "created_at", null: false
    t
.datetime "updated_at", null: false
    t
.index ["codigo"], name: "index_departamentos_on_codigo", unique: true
 
end


  create_table
"municipios", force: :cascade, options: "ENGINE=InnoDB DEFAULT CHARSET=utf8" do |t|
    t
.string "codigo", limit: 3
    t
.string "nombre"
    t
.datetime "created_at", null: false
    t
.datetime "updated_at", null: false
    t
.string "codigo_departamento", limit: 2
    t
.index ["codigo_departamento"], name: "municipios_departamento_id"
 
end


(...)


end







Angel Mauricio Pino Gonzalez

unread,
Oct 11, 2018, 2:43:03 PM10/11/18
to ror...@googlegroups.com
Que versiones de ruby y de rails estas usando?

--
--
You received this message because you are subscribed to the Google
Groups "ror-es" group.
To post to this group, send email to ror...@googlegroups.com
To unsubscribe from this group, send email to
ror_es+un...@googlegroups.com
For more options, visit this group at
http://groups.google.com/group/ror_es?hl=en
Rails no escala.

---
You received this message because you are subscribed to the Google Groups "ror-es" group.
To unsubscribe from this group and stop receiving emails from it, send an email to ror_es+un...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.


--
Angel Mauricio Pino G
AngelMauricio...@gmail.com
movil 96-436 63 48

Francis

unread,
Oct 11, 2018, 2:44:55 PM10/11/18
to ror...@googlegroups.com
Hola!

El mensaje de error es bastante explícito: Estás intentando introducir un valor demasiado largo en una columna de la tabla de la base de datos.

Mirando muy por encima, codigo_departamento tiene un límite de 2 caracteres y estás intentando insertar el valor "980190962"

El error te lo da en el fichero test/controllers/ninonino_controller_test.rb, cuyo contenido no puedo ver, por lo que poco más te puedo ayudar de momento.

Johan Donado B.

unread,
Oct 11, 2018, 2:45:06 PM10/11/18
to ror-es

ruby 2.3.3p222 (2016-11-21 revision 56859) [i386-mingw32]

Rails 5.1.6

Matias Mascazzini

unread,
Oct 11, 2018, 2:52:03 PM10/11/18
to ror...@googlegroups.com
Hola,
yo las pruebas unitarias en Rails 5, las ejecuto: rails test test/
(test/ es la carpeta donde estan las pruebas, podes ejecutar todas, una sub carpeta o una prueba individual)

Tu problema dice "queres meter un numero muy grande" y vos te preguntas de donde sale un numero tan grande? la cuestion para mi son las Fixtures, que generan IDS de forma alteatoria.

Por ejemplo yo uso asi... en una relación Provincia -> Ciudad

province_one:
  id: 1001
  name: MyprovinceOne

province_two:
  id: 1002
  name: MyprovinceTwo


city_one:
  id: 2002
  name: MyCityOne
  province_id: 1001

city_two:
  id: 2003
  name: MyCityTwo
  province_id: 1001



Saludos
Matías Mascazzini
keep in touch about.me/matiasmasca

---
Le recomiendo visitar: www.ComunidadTIC.org


El jue., 11 de oct. de 2018 a la(s) 15:37, Johan Donado B. (jdon...@gmail.com) escribió:

Matias Mascazzini

unread,
Oct 11, 2018, 2:59:25 PM10/11/18
to ror...@googlegroups.com
Me hace mucho ruido que uses "código de departamento"... Rails es "convención sobre configuración", trae una convención y si te salís de ella tenes que estar muy seguro de lo que estas cambiando. El genera de forma automatica unos ID numericos para cada tabla y para cada registro.

Acordate que si pones en español el nombre de las Entidades, vas a tener que cambiar el mecanismo que usa para hacer los plurales y los singulares. Por eso la mayoría dejamos todo en inglés.


Saludos
Matías Mascazzini
keep in touch about.me/matiasmasca

---
Le recomiendo visitar: www.ComunidadTIC.org

Johan Donado B.

unread,
Oct 11, 2018, 3:01:59 PM10/11/18
to ror-es

Gracias por responder.

Efectivamente, el mensaje es bien claro, y tal cual lo dices, me preguntaba de dónde saca un número tan grande.  El ID ahora lo coloqué como me indicas, pero el problema es con el campo codigo_departamento.  En municipios.yml dice:

one:
  id
: 1

  departamento
: one
  codigo
: '001'
  nombre
: MyString


Cuando dice departamento: one supongo que se refiere al registro one del archivo departamentos.yml.

one:
  id
: 1
  codigo
: '01'
  nombre
: MyString

Entonces de donde saca ese número tan grande para el campo codigo_departamento.

Aprovecho y menciono algo que pasé por alto.  No se si afecte.  En el modelo para municipio tengo esto:

class Municipio < ApplicationRecord
  belongs_to
:departamento, primary_key: 'codigo', foreign_key: 'codigo_departamento'
end

Johan Donado B.

unread,
Oct 11, 2018, 3:03:19 PM10/11/18
to ror-es
Tienes razón.

Tengo esto en el modelo Municipio:

class Municipio < ApplicationRecord
  belongs_to
:departamento, primary_key: 'codigo', foreign_key: 'codigo_departamento'
end






Johan Donado B.

unread,
Oct 11, 2018, 3:21:11 PM10/11/18
to ror-es

Bueno.  Al final cambié "departamento: one" por "codigo_departamento: '01'".  Esto funcionó, pero quedé con la duda de cómo debería funcionar "departamento: one" en este caso.


El jueves, 11 de octubre de 2018, 13:52:03 (UTC-5), Matias Mascazzini escribió:
Reply all
Reply to author
Forward
0 new messages