首页 > 解决方案 > 测试数据库为空

问题描述

我正在编写一个测试文件来使用 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。

标签: mysqlruby-on-railsdockerunit-testinggraphql

解决方案


推荐阅读