Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/410.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 在GraphQL变异中传递createReadStream(jest测试目的)_Javascript_Jestjs_Graphql - Fatal编程技术网

Javascript 在GraphQL变异中传递createReadStream(jest测试目的)

Javascript 在GraphQL变异中传递createReadStream(jest测试目的),javascript,jestjs,graphql,Javascript,Jestjs,Graphql,我正在努力在变异查询中传递createReadStream 我所做的是开玩笑,如下所示 const createReadStream=jest.fn(); 我就是这样用的 文件:{ 文件名:“惊奇漫画(1.pdf”, mimetype:“application/pdf”, 编码:“7bit”, createReadSteam:${createReadStream} } 这是完整的代码 从'jeto'导入{initResources}; 从“graphql”导入{graphql}; 从'ram

我正在努力在变异查询中传递createReadStream

我所做的是开玩笑,如下所示

const createReadStream=jest.fn();
我就是这样用的

文件:{
文件名:“惊奇漫画(1.pdf”,
mimetype:“application/pdf”,
编码:“7bit”,
createReadSteam:${createReadStream}
}
这是完整的代码

从'jeto'导入{initResources};
从“graphql”导入{graphql};
从'ramda'导入{prop,path};
从“../services”导入initServices;
从“../init/http”导入initHttp;
从“../init/models”导入initModels;
从“/initConfig”导入initConfig;
从“../init/database”导入initDatabase;
从“../init/router”导入initRouter;
从“../dataLoaders”导入initDataLoaders;
从“../init/apollo”导入initApollo;
从“../../lib/api”导入api;
从“../../lib/models/people”导入{ROLE};
从“/utils”导入{login};
//从“/utils/resumesTests”导入{resumes};
//从“/utils/usersTests”导入{userAdmin、userHeadHunter、userSales、userWorker};
让MONGO;
让服务器;
让runql;
让CTX;
让GCTX;
让轮廓;
const TENANT={key:'TENANT'};
描述('server | graphql | resume',()=>{
之前(异步()=>{
常量资源=[
initConfig,
初始化数据库,
初始化模型,
初始化数据加载程序,
初始服务,
阿波罗号,
初始化路由器,
initHttp,
];
返回初始资源(资源)
。然后(异步ctx=>{
CTX=CTX;
const{httpServer,mongo,models}=ctx();
MONGO=MONGO;
SERVER=httpServer;
const tenantId=wait models.tenants.collection.insertOne(TENANT).then(prop('insertedId'));
租户。_id=租户id;
config({endpoint:httpServer.url,tenant:tenant.key});
const{user}=wait login(模型,租户,[ROLE.admin]);
GCTX={
用户,
ctx:ctx,
models:CTX().models(用户,{authRequired:true,…租户}),
数据加载程序:CTX()。数据加载程序,
};
runql=异步查询=>{
log('query',query);
const res=await graphql(CTX().apollo.schema,query,null,GCTX);
console.log('res',res);
如果(res.errors)抛出res.errors[0];
返回res;
};
})
.catch(()=>{
if(MONGO){
MONGO.database.dropDatabase();
MONGO.close();
}
});
});
毕竟(()=>{
返回MONGO.database
.dropDatabase()
.然后(()=>SERVER.close())
.然后(()=>MONGO.close());
});
它('应该添加简历',异步()=>{
const createReadStream=jest.fn();
常量查询=`
突变{
创建简历(
状态:正在检查,
名字:“马修”,
姓氏:“Chedid”,
电子邮件:“mchedid@gmail.com",
电话号码:“+339494854”,
评级:5,
资历:6岁,
硬技能:[“6048d850735ec00ec36db0d9”、“6048d850735ec00ec36db0c4”、“6048d850735ec00ec36db0b8”],
软技能:[],
评论:“,
文件:{
文件名:“惊奇漫画(1.pdf”,
mimetype:“application/pdf”,
编码:“7bit”,
createReadSteam:${createReadStream}
}
){u id}}`;
PROFILE=wait runql(查询),然后(path(['data','createResume']);
expect(PROFILE._id).toBeDefined();
});
控制台日志

GraphQLError[Object]:语法错误:应为名称,找到“(”。
当我摆脱

createReadSteam:${createReadStream}
从文件和重新开始测试,我可以在控制台中观察到这一点

Error: ‘Upload’ scalar literal unsupported.

1st:变异参数应始终作为变量传递-

根本不可能在查询中传递硬编码的文件/上传! 第二步:graphQL上传通常按照中所述的两步流程实施:

  • 预处理-使用经典的后多部分表单数据编码数据集和
    操作
    (包含graphql
    “查询”
    和稍后处理的参数-突变加
    “变量”
    -非文件和空文件参数),
    映射
    (文件到查询变量映射)和文件
  • 传递给正常处理的查询(变异)得到更新,文件变量现在是上传标量(取决于实现)-具有名称的对象,上传的文件/流句柄
对于第二步测试,请遵循“正常”node.js[upload]文件/流模拟


正如@xadm提到的,解决方案是将上传的文件添加到查询旁边,并修改runql方法以添加参数->变量

it('should add resume',async()=>{
const stream=Readable.from(Buffer.from('coucou'));
常量查询=`
突变
createResume($file:Upload)
{ 
创建简历(
文件:$file,
名字:“马修”,
姓氏:“chedid”,
电子邮件:“mchedid@gmail.com",
电话号码:“+33617825408”
状态:待定,
资历:1,
硬技能:[“6048d850735ec00ec36db0d9”]
){u id,firstname}
} 
`;
const file=Promise.resolve({
createReadStream:()=>流,
流动
文件名:'./resume.pdf',
mimetype:`application/pdf`,
});
RESUME=wait runql(查询,{file});
期望(RESUME._id).toBeDefined();
expect(简历,名字),toEqual('mathieu');
});
runql=async(查询,变量={})=>{
常数res=aw