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
SourceHacer
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