Miniprueba de Rails4 | utilizando un objeto reutilizable compartido

2023-01-25 04:19:30

Recibo el siguiente error cuando ejecuto la prueba de rake con minitest:

$ rake test
DL is deprecated, please use Fiddle
Run options: --seed 55196

# Running:

.EE

Finished in 0.950979s, 3.1546 runs/s, 1.0515 assertions/s.

  1) Error:
CategoryTest#test_invalid_without_name:
NoMethodError: undefined method `name=' for nil:NilClass
    test/models/category_test.rb:14:in `test_invalid_without_name'


  2) Error:
CategoryTest#test_invalid_without_long_name:
NoMethodError: undefined method `name=' for nil:NilClass
    test/models/category_test.rb:19:in `test_invalid_without_long_name'

3 runs, 1 assertions, 0 failures, 2 errors, 0 skips

category_test.rb

require "test_helper"

class CategoryTest < ActiveSupport::TestCase

  def category
    @category = Category.new(name:'Homey')
  end

  def test_valid
    assert category.valid?
  end

  def test_invalid_without_name
    @category.name = nil
    refute @category.valid?
  end

  def test_invalid_without_long_name
    @category.name = "A"
    refute @category.valid?
  end

end

En mis modelos tengo la categoría.rb

class Category < ActiveRecord::Base
    validates :name, presence: true
end

Parece que tengo una clase nula aunque la estoy instanciando en mi método de categoría. Cualquier idea de lo que está pasando. Estoy empezando a usar Minitest, así que no estoy seguro de lo que está pasando.

- coderwannabe2

Source
Responder


0
  • Hacer

    def category
      @category ||= Category.new(name:'Homey')
    end
    

    Entonces solo usa category no @category

    Usar un getter de esta manera establecerá la instancia var si no existía antes o recuperará el valor existente