staging站点POST请求运行机制及Rails GraphQL测试异常与数据导入问题
问题1:请求是否发送到了本地localhost:3000/graphql
答案是肯定的,日志已经明确证明请求落到了本地服务:
- 日志中
Started POST "/graphql" for 127.0.0.1说明请求来源是本地回环地址,目标是本地运行的Rails服务的/graphql路径 - 后续的
Processing by GraphqlController#execute也证明是本地的GraphQL控制器处理了该请求,完全没有请求到staging站点 - 额外注意你的测试代码存在逻辑错误:你调用
post方法后完全没有使用该请求的返回结果,反而直接本地实例化SignInUsermutation调用resolve方法,这个方法默认走的是本地测试数据库,自然拿不到staging的用户数据。如果要请求staging站点的接口,需要使用HTTP客户端(如Net::HTTP、HTTParty)传入完整的带协议的URL(如https://apistaging.app.com/graphql),不要直接用Rails IntegrationTest默认的post方法,该方法默认是用于测试本地应用接口的。
问题2:如何将根目录的.sql文件导入测试数据库
你可以根据自己使用的数据库类型,选择以下任意一种方法操作:
- 方法1:使用Rails内置命令导入(无需关心数据库类型,适配所有Rails支持的数据库)
进入应用容器后执行:rails db:load SQL=./<你的sql文件名>.sql RAILS_ENV=test - 方法2:直接使用数据库原生命令导入
- 如果使用PostgreSQL:
psql -U <数据库用户名> -d <测试数据库名称> -f ./<你的sql文件名>.sql - 如果使用MySQL:
mysql -u <数据库用户名> -p<密码> <测试数据库名称> < ./<你的sql文件名>.sql
- 如果使用PostgreSQL:
- 方法3:配置自动导入(适合每次跑测试都需要固定测试数据的场景)
将导入逻辑写入db/seeds.rb文件,每次跑测试前先执行:rails db:seed RAILS_ENV=test
注意:如果你的数据库是Docker独立容器,需要确保.sql文件已经挂载到你执行命令的容器可访问的路径,也可以直接将.sql文件挂载到数据库容器中,进入数据库容器执行上述导入命令。
内容的提问来源于stack exchange,提问作者Peter Dang
相关产品推荐
相关产品推荐

