Как написать тест с этой ассоциацией ActiveRecord - PullRequest
0 голосов
/ 11 января 2019

У меня есть модель Task, у которой есть несколько параметров, один из которых - user_ids, который позволяет нескольким пользователям быть добавленными к задаче. Это делается с помощью has_many: :users, through: assigned_users

Фактическое действие контроллера работает нормально, но я рефакторинг, чтобы улучшить тестовое покрытие. Я могу сохранять задачи в приложении, но тест всегда выдает эту ошибку (полная трассировка стека ниже):

Error:
TaskTest#test_task_can_save:
TypeError: no implicit conversion of Symbol into Integer
    test/models/task_test.rb:14:in `block in <class:TaskTest>'

Очень простой тест должен состоять в том, что задачи могут сохранить:

требуется 'test_helper'

class TaskTest < ActiveSupport::TestCase
  def setup
    @usr = users :joe

    @task = Task.new(comments: "Basic task", project_id: 1, subproject_id: 2,
                      day: "2019-01-09", time: 55, user_ids: [@usr.id])
  end



   test "task can save" do
     assert @task.save "task should save"
   end
  end

Это рабочее create действие.

tasks_controller

def create

@task = current_user.tasks.build(task_params)

respond_to do |format|
  if @task.save
    current_user.tasks << @task
    @tasks = current_user.tasks
    format.js {flash[:notice] = "Task added"}

   else
     ...

end

private
  def task_params
     params.require(:task).permit(:comments, :project_id, :subproject_id, :day, :time, user_ids: [])
 end

Задачи сохраняются и все работает, только не этот тест. Я пробовал другие вещи в хэше user_ids:, например, [User.first.id], и [1], кажется, все выдает ту же ошибку.

un options: --seed 2048---=---=---=---=---=---=---=---=---=---=---=---=---=---=---=---=---=---=---=---=---=---=---=---=---=---=---=---=---=---=---=---=---=---=---=] 0% Time: 00:00:00,  ETA: ??:??:??

# Running:

ERROR["test_task_can_save", #<Minitest::Reporters::Suite:0x007f8f9016b3c8 @name="TaskTest">, 0.38674699992407113]
 test_task_can_save#TaskTest (0.39s)
TypeError:         TypeError: no implicit conversion of Symbol into Integer
            test/models/task_test.rb:14:in `block in <class:TaskTest>'

  1/1: [==========================================================================================================================================================] 100% Time: 00:00:00, Time: 00:00:00
E

Error:
TaskTest#test_task_can_save:
TypeError: no implicit conversion of Symbol into Integer
    test/models/task_test.rb:14:in `block in <class:TaskTest>'


/usr/local/lib/ruby/gems/2.4.0/gems/railties-5.0.7.1/lib/rails/test_unit/reporter.rb:70:in `method': undefined method `test_task_can_save' for class `Minitest::Result' (NameError)
    from /usr/local/lib/ruby/gems/2.4.0/gems/railties-5.0.7.1/lib/rails/test_unit/reporter.rb:70:in `format_rerun_snippet'
    from /usr/local/lib/ruby/gems/2.4.0/gems/railties-5.0.7.1/lib/rails/test_unit/reporter.rb:23:in `record'
    from /usr/local/lib/ruby/gems/2.4.0/gems/minitest-5.11.3/lib/minitest.rb:803:in `block in record'
    from /usr/local/lib/ruby/gems/2.4.0/gems/minitest-5.11.3/lib/minitest.rb:802:in `each'
    from /usr/local/lib/ruby/gems/2.4.0/gems/minitest-5.11.3/lib/minitest.rb:802:in `record'
    from /usr/local/lib/ruby/gems/2.4.0/gems/minitest-5.11.3/lib/minitest.rb:334:in `run_one_method'
    from /usr/local/lib/ruby/gems/2.4.0/gems/minitest-5.11.3/lib/minitest.rb:321:in `block (2 levels) in run'
    from /usr/local/lib/ruby/gems/2.4.0/gems/minitest-5.11.3/lib/minitest.rb:320:in `each'
    from /usr/local/lib/ruby/gems/2.4.0/gems/minitest-5.11.3/lib/minitest.rb:320:in `block in run'
    from /usr/local/lib/ruby/gems/2.4.0/gems/minitest-5.11.3/lib/minitest.rb:360:in `on_signal'
    from /usr/local/lib/ruby/gems/2.4.0/gems/minitest-5.11.3/lib/minitest.rb:347:in `with_info_handler'
    from /usr/local/lib/ruby/gems/2.4.0/gems/minitest-5.11.3/lib/minitest.rb:319:in `run'
    from /usr/local/lib/ruby/gems/2.4.0/gems/railties-5.0.7.1/lib/rails/test_unit/line_filtering.rb:9:in `run'
    from /usr/local/lib/ruby/gems/2.4.0/gems/minitest-5.11.3/lib/minitest.rb:159:in `block in __run'
    from /usr/local/lib/ruby/gems/2.4.0/gems/minitest-5.11.3/lib/minitest.rb:159:in `map'
    from /usr/local/lib/ruby/gems/2.4.0/gems/minitest-5.11.3/lib/minitest.rb:159:in `__run'
    from /usr/local/lib/ruby/gems/2.4.0/gems/minitest-5.11.3/lib/minitest.rb:136:in `run'
    from /usr/local/lib/ruby/gems/2.4.0/gems/minitest-5.11.3/lib/minitest.rb:63:in `block in autorun'
    from /usr/local/lib/ruby/gems/2.4.0/gems/spring-2.0.2/lib/spring/application.rb:171:in `fork'
    from /usr/local/lib/ruby/gems/2.4.0/gems/spring-2.0.2/lib/spring/application.rb:171:in `serve'
    from /usr/local/lib/ruby/gems/2.4.0/gems/spring-2.0.2/lib/spring/application.rb:141:in `block in run'
    from /usr/local/lib/ruby/gems/2.4.0/gems/spring-2.0.2/lib/spring/application.rb:135:in `loop'
    from /usr/local/lib/ruby/gems/2.4.0/gems/spring-2.0.2/lib/spring/application.rb:135:in `run'
    from /usr/local/lib/ruby/gems/2.4.0/gems/spring-2.0.2/lib/spring/application/boot.rb:19:in `<top (required)>'
    from /usr/local/Cellar/ruby/2.4.1_1/lib/ruby/2.4.0/rubygems/core_ext/kernel_require.rb:55:in `require'
    from /usr/local/Cellar/ruby/2.4.1_1/lib/ruby/2.4.0/rubygems/core_ext/kernel_require.rb:55:in `require'
    from -e:1:in `<main>'

1 Ответ

0 голосов
/ 12 января 2019

Оказалось, что была проблема с project_id:, так как я не настроил проект в методе setup.

Мне пришлось вытащить Project из проекта:

def setup
    @usr = users :joe
    @project = projects :projectOne
    @task = Task.new(comments: "Basic task", project_id: @project.id, subproject_id: 2,
                      day: "2019-01-09", time: 55, user_ids: [@usr.id])
  end
...