2017-04-11 9 views
0

我正在編寫測試類來執行我的方法類(在方法類中有一個將執行的sql語句) 但是NoMethodError: undefined method持續時間'for nil:NilClass` is給出。NoMethodError:未定義的方法'duration'爲零:NilClass

class AverageTimeForFirstReferralTest < ActiveSupport::TestCase 

    def setup 
    user1 = FactoryGirl.create(:user) 
    user2 = FactoryGirl.create(:user) 
    user2.referrer_id = user1.id 
    user2.created_at = 1.month.from_now 
    end 

    def test_creating_view_for_avg_time_for_first_ref 
    AverageTimeForFirstReferral.update_view_command(); 
    assert_equal(1.month * 1.hour, AverageTimeForFirstReferral.first.duration) 
    end 
end 

方法類如下:

class AverageTimeForFirstReferral < ActiveRecord::Base 
    class << self 
    def update_view_command 
     # executing the sql statement 
     self.connection.execute %Q(CREATE OR REPLACE VIEW average_time_for_first_referrals AS 
            SELECT u.id, u.created_at user_created_at, u.referrer_id, r.`created_at` referrer_created_at, TIMEDIFF('r.created_at','u.created_at') as Time_Diff 
            from users u inner join users r 
            on u.`referrer_id`= r.`id` 
            WHERE TIMEDIFF(r.created_at,u.created_at) > 0;) 
    end 
    end 
end 
+0

看起來您的表格中現在有行'AverageTimeForFirstReferral',您需要使用工廠女孩創建一行。 – coderhs

回答

0

的SQL語句不爲AverageTimeForFirstReferral模式的表中創建的任何記錄..這就是爲什麼。

+0

謝謝。我創建了自己的TIMEDIFF函數,如下所示: create function TIMEDIFF(start_date DateTime,end_date DateTime)返回十進制(10,2) RETURN Datediff(start_date,end_date)* 24.0 +(提取(小時from end_date) - 提取start_date))+(提取(從end_date開始) - 提取(從start_date開始))/ 60 現在它正在工作 –

相關問題