gpt4 book ai didi

ruby-on-rails - Rails 测试试图删除 sql View

转载 作者:行者123 更新时间:2023-11-29 13:56:12 28 4
gpt4 key购买 nike

我正在尝试为我的应用程序编写单元测试和集成测试,但是当我运行 rake 测试时,我看到了很多错误,所有错误都是由于系统试图删除只读的 sql View 引起的。当测试只是为了验证数据创建时为什么要尝试删除 View ,我如何让我的测试通过这个?该应用程序运行良好,但我无法让测试正常运行。 (在添加 sql View 之前,所有测试都运行良好)。

这是我看到的错误:

    Finished in 0.779585s, 39.7647 runs/s, 0.0000 assertions/s.

1) Error:
UsersControllerTest#test_should_get_new:
ActiveRecord::StatementInvalid: PG::ObjectNotInPrerequisiteState: ERROR: cannot delete from view "playabilitysummary"
DETAIL: Views that do not select from a single table or view are not automatically updatable.
HINT: To enable deleting from the view, provide an INSTEAD OF DELETE trigger or an unconditional ON DELETE DO INSTEAD rule.
: DELETE FROM "playabilitysummary"


Error:
UsersControllerTest#test_should_get_new:
NoMethodError: undefined method `each' for nil:NilClass



2) Error:
StaticPagesControllerTest#test_should_get_contactus:
ActiveRecord::StatementInvalid: PG::ObjectNotInPrerequisiteState: ERROR: cannot delete from view "playabilitysummary"
DETAIL: Views that do not select from a single table or view are not automatically updatable.
HINT: To enable deleting from the view, provide an INSTEAD OF DELETE trigger or an unconditional ON DELETE DO INSTEAD rule.
: DELETE FROM "playabilitysummary"

PlayabilitySummary模型:

class PlayabilitySummary < ActiveRecord::Base

self.table_name = 'playabilitysummary'
after_initialize :readonly!

end

可玩性总结迁移:

class CreatePlayabilitySummaries < ActiveRecord::Migration
def up
execute <<-SQL
CREATE VIEW PlayabilitySummary AS
SELECT date,user_id,speed,firmness,moisture FROM (((SELECT distinct(schedules.date) as date, speed.user_id as user_id, speed.speed as speed FROM schedules
join
(SELECT user_id, measure_date as speed_date, avg(speed) as speed FROM greens group by user_id, measure_date order by user_id, measure_date asc) as speed
on schedules.date = speed.speed_date) as avg1
JOIN
(SELECT user_id as fuser_id, measure_date as firm_date, avg(firmness) as firmness FROM greens group by user_id, measure_date order by user_id, measure_date asc) as firmness
ON avg1.user_id = firmness.fuser_id AND avg1.date = firmness.firm_date) as avg2
JOIN
(SELECT user_id as muser_id, measure_date as moist_date, avg(moisture) as moisture FROM greens group by user_id, measure_date order by user_id, measure_date asc) as moisture
ON avg2.fuser_id = moisture.muser_id AND avg2.date = moisture.moist_date)
SQL
end

def down
execute 'DROP VIEW PlayabilitySummary'
end

end

示例测试(user_controller):

require 'test_helper'

class UsersControllerTest < ActionController::TestCase
test "should get new" do
get :new
assert_response :success
end


end

最佳答案

我在最近的 rails/rspec 更新后遇到了这个问题,并认为以下内容可能有用。如果您在迁移中执行任意 SQL 命令(例如创建 View 或函数),那么在运行测试时这些命令可能会丢失,因为测试从 schema.rb 加载。

更改 format of the schema type to :sql 允许将整个结构转储到文件中,这意味着测试运行器现在将拾取这些:

# config/application.rb
config.active_record.schema_type = :sql

运行 rake db:schema:dump 以生成必要的 db/structure.sql 将停止在测试运行之间删除您的 VIEWS 和 FUNCTION。

关于ruby-on-rails - Rails 测试试图删除 sql View ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31197502/

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