我在运行一个控制器测试时遇到了问题。我得到的错误是缺少一个模板:
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,这似乎没有给我带来任何进展。我是不是遗漏了什么?
发布于 2016-09-06 20:17:20
您需要在控制器测试中指定请求格式:
get :vulnerabilities_per_version, id: @project.id, xhr: true, format: :js
发布于 2016-09-06 18:36:53
您肯定必须向控制器指定它必须通过js.erb文件进行响应。正如您在错误消息中所看到的,Rails正在寻找一个HTML模板,却找不到一个(他正在寻找vulnerabilities_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如果成功了就告诉我。万事如意。
https://stackoverflow.com/questions/39355251
复制相似问题