mysql - 测试数据库为空
问题描述
我正在编写一个测试文件来使用 Ruby on Rails 为我们的 GraphQL API 测试一个登录突变,它需要我向我们的暂存站点发送一个 POST 请求以使其工作。这是测试文件的样子:
require 'test_helper'
class Mutations::SignInUserTest < ActionDispatch::IntegrationTest
def perform(args = {})
Mutations::SignInUser.new(object: nil, field: nil, context: {}).resolve(args)
end
test 'sign in user' do
post "staging.com"
user = perform(
auth: {
user_id: "example",
password: "example"
}
)
assert user.persisted?
end
end
我发现这不起作用,因为用户最终为空,因此user.persisted?
返回错误。用户为空,因为当我使用查询检查数据库和表时
results = ActiveRecord::Base.connection.exec_query("USE app_api_development;")
results = ActiveRecord::Base.connection.exec_query("SELECT * FROM users;")
puts results
并且不返回任何行。我 100% 确定暂存站点上的数据库中有数据,因为我可以使用 Altair 和相同的 POST 请求登录。当我这样做mysql -u root -p
时,数据库和表也有我从 .sql 文件中获取的数据。我的问题是为什么当我运行测试文件时我的数据库是空的?虽然暂存站点和我的本地 MySQL 在数据库中都有数据。有没有办法将我的 .sql 文件导入这个测试数据库?这是我的 database.yml 文件:
default: &default
adapter: mysql2
pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %>
username: root
password: root
host: db
development:
<<: *default
database: app_api_development
test:
<<: *default
database: app_api_development
production:
<<: *default
database: app_api_production
staging:
<<: *default
database: app_api_staging
我们的应用程序在 docker 容器上运行。我的环境是 Windows 上的 Ubuntu。
解决方案
推荐阅读
- excel - 运行时错误“91”:对象变量或未在 h = ie.hwnd 行上设置块变量
- objective-c - Xamarin 方法调配不起作用。为什么不?
- android - Koin 中的 DSL 有什么用?
- python - (Python)我需要删除列表中的重复元素(使用删除功能;避免类型转换)。试图确定为什么我的解决方案不正确
- c# - 实体框架错误删除具有外键的对象
- angular - 即使在 Angular 8 中的 ngAfterViewInit 上也未定义 ViewChild elementRef
- java - android Studio 的 DownloadManger 类中“外部”的确切参考是什么?
- javascript - ASP / HTML / Javascript 无法正常工作
- mongodb - MongoDB 使用匹配而不是聚合
- react-native - 在视图中找不到意外的令牌反应本机