Модульный тест рельсов - PullRequest
0 голосов
/ 21 июля 2011

Пожалуйста, помогите. Я пытаюсь написать модульный тест для метода в моей модели. Он продолжает давать мне следующую ошибку:

{1) Ошибка: test_Total_for_a_given_date_range_for_Campaigns (LetterTest): Ошибка типа: невозможно преобразовать ActiveSupport :: Duration в строку c: /Users/Kay/rails-app/CS5942/app/models/letter.rb: 19: в +' c:/Users/Kay/rails-app/CS5942/app/models/letter.rb:19:in tribe_total_on ' test / unit / letter_test.rb: 17: в "блоке"}

Вот что у меня есть в моем тестовом файле:

test "Total for a given date range for Campaigns" do        
  end_date = (Date.today + 1.day).to_date.strftime('%Y-%m-%d')
  expected = Letter.where("letter_campaign_id = '1' and created_at between '#{ (Date.today - 1.day).to_date.strftime('%Y-%m-%d')}' and #{end_date}").count
  data = Letter.tribe_total_on( 1 , (Date.today - 1.day).to_date.strftime('%Y-%m-%d') , (Date.today).to_date.strftime('%Y-%m-%d'))

  assert_equal expected, data
end

Кажется, есть проблема со знаком плюс. Я был бы очень рад, если бы я мог найти решение для этого. Спасибо.

Это метод tribe_total_on:

def self.tribe_total_on(tribe, start_date, end_date)
  #Letter.connection.execute("SELECT COUNT(id) FROM letters WHERE letter_campaign_id = #{tribe} AND created_at BETWEEN '#{start_date.to_date.strftime('%Y-%m-%d')}' and '#{end_date.to_date.strftime('%Y-%m-%d')}'")[0][0]
  end_date = end_date + 1.day #This is line 19 ...Had to include the one day to accomodate dates like 2011-06-05 01:02:03

  Letter.where("letter_campaign_id = #{tribe} AND created_at between ? and ?", start_date.to_date, end_date.to_date).count
end

1 Ответ

2 голосов
/ 21 июля 2011

Откройте консоль Rails и введите то, что вы пытаетесь сделать, и вы получите следующее:

(Date.today) .to_date.strftime ('% Y-% m-% d ') + 1.day Ошибка типа: невозможно преобразовать ActiveSupport :: Duration в строку из (irb): 20: в `+'

Вы тожевам нужно будет выполнить преобразование в strftime, прежде чем передать его в tribe_total_on, или вам придется добавить 1.day к дате, прежде чем вы вызовете strftime, прежде чем передать его в tribe_total_on.

Итак:

(Date.today + 1.day).to_date.strftime('%Y-%m-%d')

или:

def self.tribe_total_on(tribe, start_date, end_date)
  end_date = (end_date + 1.day).to_date.strftime('%Y-%m-%d')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...