我正在使用 minitest 5.3.3 使用 ruby 2.0.0p247 在 rails 4.1.1 app 中测试模型。运行测试后我得到了
Finished in 0.017875s, 167.8317 runs/s, 55.9439 assertions/s.
1) Error:
AdditionTest#test_class_method:
NoMethodError: undefined method `number' for nil:NilClass
这是test_helper.rb
ENV['RAILS_ENV'] ||= 'test'
require File.expand_path('../../config/environment', __FILE__)
require 'rails/test_help'
class ActiveSupport::TestCase
fixtures :all
end
测试看起来像这样
class AdditionTest < ActiveSupport::TestCase
def test_class_method
m = Addition.multiply(3, 4)
assert_equal 12, m
end
end
模型看起来像这样,数字是表格列或模型属性;
class Addition < ActiveRecord::Base
def self.multiply(first_id, second_id)
Adder.new(first_id, second_id).multiply
end
end
Adder类:
class Adder
def initialize(first_id, second_id)
@first = first_id
@second = second_id
end
def multiply
@first_value * @second_value
end
private
def fetch_first_value
@fetch_db = Addition.where(id: @first)
@get_first = @fetch_db.first
@first_value = @get_first.number
end
def fetch_second_value
@fetch_db_2 = Addition.where(id: @second)
@get_second = @fetch_db_2.first
@second_value = @get_second.number
end
end
yaml文件如下所示:
one:
number: 5
two:
number: 6
答案 0 :(得分:0)
你的测试是问题所在。您引用了不存在的ID。试试这个:
class AdditionTest < ActiveSupport::TestCase
def test_class_method
m = Addition.multiply(additions(:one), additions(:two))
assert_equal 30, m
end
end