运行我的某个控制器测试时遇到问题。我得到的错误是缺少模板:
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
,因此无法将我带到任何地方。我错过了什么吗?
答案 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