我通读并关注了Why does a GraphQL query return null?,但是仍然得到null
字段的对象,应该在其中获取对象数组。
这是我的解析器。如果我查找单个_id
,则测试通过。如果没有_id
,我希望它返回所有内容。查询和mongoDB运行良好。我可以console.log
response
,这正是我要的东西,但是一旦我返回GraphQL的response
,GraphQL就会把它弄乱。
comment: ({_id}: {_id: string}) => {
if (_id) {
return Comment.findOne({_id}).exec();
} else {
return Comment.find({}).exec().then((response) => {
console.log("response inside resolver: ", response); // <-- THIS HAS THE ARRAY OF OBJECTS!
return response;
});
}
}
因此,在进行测试时,它将返回数据对象而不是数组,并且所有字段均为空。这是我的测试:
it("should retrieve all records from database", (done) => {
const query: string = `query {
comment { _id author text }
}`;
request(app)
.post("/comments")
.send({query})
.expect(200)
.end((err, res) => {
console.log("response inside test: ", res.body.data.comment); // <-- OBJECT WITH NULL FIELDS!
if (err) { return done(err); }
expect(res.body.data.comment).to.have.lengthOf(arrayOfNewElements.length);
res.body.data.comment.sort((a: IComment, b: IComment) => parseInt(a._id, 10) - parseInt(b._id, 10));
expect(res.body.data.comment).to.deep.equal(arrayOfNewElements);
done();
});
});
console.log输出:
我该怎么做才能将GraphQL弄乱在解析器中返回的承诺和测试之间?
注意:这是在TypeScript中。
我在下面回答。希望对您有所帮助。
答案 0 :(得分:0)
正如@DanielRearden在评论中所说,您不能返回对象或列表。我将查询更改为返回数组:
nvarchar(100)
并像这样更新了我的解析器,以使测试通过:
MGL UB str GB-building 7 floor 702 number.__________________
当然,我必须更新以前的测试才能期望使用数组而不是单个对象。