如何使用Minitest触发JS控制器操作

时间:2015-03-10 16:18:20

标签: javascript ruby-on-rails integration-testing minitest

在测试中,我想模拟仅接受JS请求的请求。我在"普通"式:

patch study_update_user_vocab_path(@user, @vocabs[index]), 
                                { strength: "1", resume_study_index: "index" }

在这里,"力量"和" resume_study_index"是表单字段的ID。运行测试时,我收到以下错误消息:

 ActionView::MissingTemplate: ActionView::MissingTemplate: Missing template vocabs/study_update, application/study_update with {:locale=>[:en], :formats=>[:html], :variants=>[], :handlers=>[:erb, :builder, :raw, :ruby, :jbuilder, :coffee]}.

这很有道理,因为没有渲染视图。但是我怎么能告诉Mini:测试触发/期待JS?

2 个答案:

答案 0 :(得分:0)

我可以想到两种方式。

  1. 在您的路线中,将defaults: { formats: 'js' } }添加到study_update_user_vocab_path。所以这将是patch 'blah/path', to: 'controller#action', as: :study_update_user_vocab, defaults: { formats: 'js' } }

  2. 在测试中,写出完整路径并将.js添加到最后。所以patch "/users/#{@user.id}/vocabs/#{vocabs[index]}.js", { strength: "1", resume_study_index: "index" }

答案 1 :(得分:0)

在控制器测试中,您没有将请求的路径传递给patch,您传递了操作,这是方法的名称。我假设您的控制器上的方法是update_user_vocab,所以如果我错了,请将其与您的方法名称交换出来。

patch :update_user_vocab, id: @vocabs[index], # The record ID you are working with?
                          strength: "1", # I assume this is some needed query param
                          resume_study_index: "index", #same
                          format: "js" # send this as a js request