gpt4 book ai didi

Ruby-on-rails 测试在呈现 JS View 时引发 InvalidCrossOriginRequest

转载 作者:行者123 更新时间:2023-12-03 23:57:47 26 4
gpt4 key购买 nike

我正在测试一个 Controller ,它具有以 .js.erb 格式呈现 View 的 Action 。
对这些操作的测试会引发以下错误:

Minitest::UnexpectedError: ActionController::InvalidCrossOriginRequest: Security warning: an embedded tag on another site requested protected JavaScript. If you know what you're doing, go ahead and disable forgery protection on this action to permit cross-origin JavaScript embedding.



伪造保护导致此错误,因为当我对这些操作设置异常时,它可以,但我不想禁用它。

这是我的 Controller :
class TasksController < ApplicationController

def new
# TODO add blah later
@task = Task.new
render 'tasks/show_form.js.erb'
end

def create
# FIXME there is bug here
@task = Task.new(task_params)
@task.user = current_user
authorize! :create, @task
save_task
end

def edit
@task = Task.find(params[:id])
authorize! :edit, @task
render 'tasks/show_form.js.erb'
end

def update
@task = Task.find(params[:id])
@task.assign_attributes(task_params)
authorize! :update, @task
save_task
end

def destroy
@task = Task.find(params[:id])
authorize! :destroy, @task
@task.destroy
@tasks = Task.accessible_by(current_ability)
end

private

def save_task
if @task.save
@tasks = Task.accessible_by(current_ability)
render 'tasks/hide_form.js.erb'
else
render 'tasks/show_form.js.erb'
end
end

def task_params
params.require(:task).permit(:title, :note, :completed)
end
end

这是我对这个 Controller 的测试:
require 'test_helper'

class TasksControllerTest < ActionDispatch::IntegrationTest
#include Devise::Test::ControllerHelpers

def setup
@task = tasks(:one)
@password = "password"
@confirmed_user = User.create(email: "#{rand(50000)}@example.com",
password: @password,
confirmed_at: "2020-02-01 11:35:56")
@unconfirmed_user = User.create(email: "#{rand(50000)}@example.com",
password: @password,
confirmed_at: "")
sign_in(user: @confirmed_user, password: @password)

end

test "should get new" do
get new_task_url
assert_response :success
end

test "should create task" do
assert_difference('Task.count') do

post tasks_url, params: {task: {title: 'Dont fail test !'}}
end

assert_redirected_to task_url(Task.last)
end

test "should get edit" do
get edit_task_url(@task)
assert_response :success
end

test "should update task" do
patch task_url(@task), params: {task: {title: 'updated'}}
assert_redirected_to task_url(@task)
article.reload
assert_equal "updated", article.title
end

test "should destroy task" do
assert_difference('Task.count', -1) do
delete task_url(@task)
end

assert_redirected_to tasks_url
end
end

你们中有人知道如何纠正这个错误吗?

先感谢您

最佳答案

您可以尝试更改您的 get 请求,以使用浏览器用于 AJAX 请求的相同机制,即 XMLHttpRequest。您可以使用 xhr 在 Rails 测试中执行此操作

在你的情况下:

xhr :get, new_task_url

这意味着您不是为了让测试通过而绕过 rails 默认值。

关于Ruby-on-rails 测试在呈现 JS View 时引发 InvalidCrossOriginRequest,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39578524/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com