ActionView :: MissingTemplate:缺少js.erb文件的模板

时间:2016-09-06 18:06:22

标签: ruby-on-rails

运行我的某个控制器测试时遇到问题。我得到的错误是缺少模板:

ActionView::MissingTemplate Missing template vulnerabilities/vulnerabilities_per_version, application/vulnerabilities_per_version 
with {:locale=>[:en], :formats=>[:html], :variants=>[], :handlers=>[:erb, :builder, :raw, :ruby, :coffee, :arb, :haml, :jbuilder]}

这是我的routes.rb文件:

......code....
get 'security' => 'vulnerabilities#vulnerabilities_per_version', as: :vulnerabilities, defaults: { format: 'js' }
......code.....

正如您所看到的,我显然正在制作仅接受js的格式,并且调用确实在日志中以JS的形式出现。

这是控制器:

class VulnerabilitiesController < ApplicationController
  def vulnerabilities_per_version
    @release_versions = @releases.map(&:version).to_json
  end
end

以下是我的观点:

app/views/vulnerabilities/vulnerabilities_per_version.js.erb

$(function () {
 $('#vulnerabilities').highcharts({
     chart: {
         type: 'column',
         events: {
         load: function() {
             this.renderer.image('http://i64.tinypic.com/25irqt5.png', 60, 30, 280, 30)
                 .add();
             }
         }
     },
     credits: {
         enabled: false
     },
     title: {

     ....code....

这是我的控制器测试:

require 'test_helper'

class VulnerabilitiesControllerTest < ActionController::TestCase
  it 'should retrieve the 10 most recent releases for a project' do
    @project = create(:project)
    @project.project_security_sets << create(:project_security_set)
    @project.project_security_sets[0].releases << create_list(:release, 10)
    @project.project_security_sets[0].releases.each do |r|
      r.vulnerabilities << create(:vulnerability)
    end
    @project.update!(best_project_security_set_id: @project.project_security_sets[0].id, editor_account: create(:admin))
    get :vulnerabilities_per_version, id: @project.id, xhr: true
    assert_response :success
    assert_equal 10, @project.best_project_security_set.releases.count
    assert_equal @project.best_project_security_set.releases.order(released_on: :asc), assigns(:releases)
  end
end

自从我处理渲染javascript文件以来,已经有一段时间了,但我应该有必要的组件。

我有请求以js形式进入,响应被接受,我可以从js.erb文件中看到我的高清渲染。我尝试了respond_to阻止,但由于错误已从200更改为404,因此无法将我带到任何地方。我错过了什么吗?

2 个答案:

答案 0 :(得分:1)

您必须向控制器指定它必须通过js.erb文件进行响应。 正如您在错误消息中看到的那样,Rails正在寻找一个HTML模板而没有找到一个(他正在寻找漏洞_per_version.html.erb)。

因此,在控制器的vulnerabilities_per_version方法中,在@release_versions = @releases.map(&:version).to_json行之后,添加:

respond_to do |format|
  format.js  # <-- will render `app/views/vulnerabilities/vulnerabilities_per_version.js.erb`
end

让我知道它是否成功。 一切顺利。

答案 1 :(得分:0)

您需要在控制器测试中指定请求格式:

get :vulnerabilities_per_version, id: @project.id, xhr: true, format: :js