rails单元测试模型,调用数据库说表列为nil时为nil

时间:2014-05-26 20:39:29

标签: ruby-on-rails unit-testing ruby-on-rails-4 minitest

我正在使用 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

1 个答案:

答案 0 :(得分:0)

你的测试是问题所在。您引用了不存在的ID。试试这个:

class AdditionTest < ActiveSupport::TestCase
  def test_class_method
    m = Addition.multiply(additions(:one), additions(:two)) 
    assert_equal 30, m
  end
end