【发布时间】:2021-10-22 16:07:30
【问题描述】:
我正在为我的 Laravel 项目编写一些测试。
我的 TestCase 文件使用 RefreshDatabase 特征,据我所知,它会在每次运行测试时运行我的所有迁移。
我在测试环境中使用 SQLite,在开发环境中使用 MySQL。
现在的问题是我最近创建了一个执行一些原始 MySQL 代码的迁移文件。
当我现在运行测试时,我收到以下错误
SQLSTATE[HY000]: General error: 1 near "OR": syntax error
SQLite 似乎不支持 CREATE OR REPLACE 语法(见下面我的代码)。
导致问题的迁移文件只是创建了一个视图表,因此我的测试不需要它(至少目前是这样)。
可能的解决方案?
我想我的主要选择是以下之一:
使用MySQL作为测试环境
跳过任何执行 MySQL 代码的迁移文件。但是怎么做呢?
没关系,但这是导致问题的 MySQL 代码:
CREATE OR REPLACE VIEW view_projects
AS
SELECT
projects.title AS title,
projects.description AS description,
_project_types.title AS type,
_project_timelines.title AS projected_timeline,
users.id AS manager_id,
users.username AS manager_username,
projects.planned_start_date AS start_date,
projects.planned_end_date AS end_date
FROM
projects
LEFT JOIN users ON projects.manager = users.id
LEFT JOIN _project_types ON projects.type = _project_types.id
LEFT JOIN _project_timelines ON projects.projected_timeline = _project_timelines.id;
");
【问题讨论】:
-
这不是答案 - 但试试这个。它和 SQLIte 一样快,但可以解决所有问题,就像你遇到的 medium.com/@2618094/…