【发布时间】:2021-07-11 07:29:06
【问题描述】:
我正在努力在突变查询中传递 createReadStream。
我所做的是用 Jest 模拟如下
const createReadStream = jest.fn();
我就是这样用的
file: {
filename: "Marvel (1).pdf",
mimetype: "application/pdf",
encoding: "7bit",
createReadSteam: ${createReadStream}
}
这是完整的代码
import { initResources } from 'jeto';
import { graphql } from 'graphql';
import { prop, path } from 'ramda';
import initServices from '../services';
import initHttp from '../init/http';
import initModels from '../init/models';
import initConfig from './initConfig';
import initDatabase from '../init/database';
import initRouter from '../init/router';
import initDataLoaders from '../dataLoaders';
import initApollo from '../init/apollo';
import api from '../../lib/api';
import { ROLE } from '../../lib/models/people';
import { login } from './utils';
// import { resumes } from './utils/resumesTests';
// import { userAdmin, userHeadHunter, userSales, userWorker } from './utils/usersTests';
let MONGO;
let SERVER;
let runql;
let CTX;
let GCTX;
let PROFILE;
const TENANT = { key: 'TENANT' };
describe('server | graphql | Resumes', () => {
beforeAll(async () => {
const resources = [
initConfig,
initDatabase,
initModels,
initDataLoaders,
initServices,
initApollo,
initRouter,
initHttp,
];
return initResources(resources)
.then(async ctx => {
CTX = ctx;
const { httpServer, mongo, models } = ctx();
MONGO = mongo;
SERVER = httpServer;
const tenantId = await models.tenants.collection.insertOne(TENANT).then(prop('insertedId'));
TENANT._id = tenantId;
api.config({ endpoint: httpServer.url, tenant: TENANT.key });
const { user } = await login(models, TENANT, [ROLE.admin]);
GCTX = {
user,
ctx: CTX,
models: CTX().models(user, { authRequired: true, ...TENANT }),
dataLoaders: CTX().dataLoaders,
};
runql = async query => {
console.log('query', query);
const res = await graphql(CTX().apollo.schema, query, null, GCTX);
console.log('res', res);
if (res.errors) throw res.errors[0];
return res;
};
})
.catch(() => {
if (MONGO) {
MONGO.database.dropDatabase();
MONGO.close();
}
});
});
afterAll(() => {
return MONGO.database
.dropDatabase()
.then(() => SERVER.close())
.then(() => MONGO.close());
});
it('should add resumes', async () => {
const createReadStream = jest.fn();
const query = `
mutation {
createResume(
status: checking,
firstname: "Mathieu",
lastname: "Chedid",
email: "mchedid@gmail.com",
phoneNumber: "+33 9 49 48 50 54",
rating: 5,
seniority: 6,
hardSkills: ["6048d850735ec00ec36db0d9", "6048d850735ec00ec36db0c4", "6048d850735ec00ec36db0b8"],
softSkills: [],
comment: "",
file: {
filename: "Marvel (1).pdf",
mimetype: "application/pdf",
encoding: "7bit",
createReadSteam: ${createReadStream}
}
){ _id } }`;
PROFILE = await runql(query).then(path(['data', 'createResume']));
expect(PROFILE._id).toBeDefined();
});
控制台日志
GraphQLError [Object]: Syntax Error: Expected Name, found "(".
当我摆脱
createReadSteam: ${createReadStream}
从文件中重新开始测试,我可以在控制台中观察到这一点
Error: ‘Upload’ scalar literal unsupported.
【问题讨论】:
标签: javascript jestjs graphql