无法使用Jest测试Apollo服务器

时间:2019-11-19 03:34:24

标签: javascript node.js typescript graphql

我正在学习如何用Jest(可能是Sinon来)测试Apollo服务器。

不久之前,我刚刚学习完Apollo GraphQL,并做了一个简单的CRUD项目。

我采用了自己的方法,而不是像Apollo服务器showed那样添加datasources,而是使它们发挥作用。

// user.service.ts

const resolver = {
  Query: {
    sellers: () => query.index(),

    seller: (_root: any, { id }: { id: number }) => query.show({ id }),
  }
}

export default resolver
// user.query.ts

const query = {
  // Find all sellers
  async index() {
    // Query in database
    const result: Seller[] = await service.findAll()

    // Return sellers
    return result
  },

  // Find one seller by id
  async show({ id }: { id: number }) {
    // Query by id in database
    const result: Seller = await service.findOneById(id)

    // Return found seller
    return result
  }
}

export default query
// user.service.ts

const service = {
  async findAll(): Promise<Seller[]> {
    // Get sellers from db
    const sellers = knex('seller').select()

    // Return sellers array
    return sellers
  },

  async findOneById(id: number): Promise<Seller> {
    // Get a seller by id
    const seller = knex('seller')
      .where('id', id)
      .first()

    // Return seller object
    return seller
  }
}

export default service

现在我在测试方面遇到了麻烦。 我不知道在哪里添加模拟功能

通常使用REST的{​​{1}} API:

Sinon
// controller.js

module.exports = {
  // A func that takes in two parameters `req` and `res` [request, response]
  getIndexPage: (req, res) => {
    res.send("Hey");
  }
}

我将它们用作函数的原因是我不知道如何在// controller.test.js const indexPage = require("./controller.js"); describe("getIndexPage", function() { it("should send hey", function() { let req = {} // Have `res` have a send key with a function value coz we use `res.send()` in our func let res = { // Replace empty function with a spy send: sinon.spy() } indexPage.getIndexPage(req, res); // Let's see what we get on res.send console.log(res.send); // `res.send` called once expect(res.send.calledOnce).to.be.true; // Expect to get argument `bla` on first call expect(res.send.firstCall.args[0]).to.equal("bla"); }); }); 文件中分隔代码(一个文件中的所有查询和突变),并且代码还在不断增长(超过200行)。尽管它们是函数,但我可以分隔代码,例如datasource中的查询和query.ts中的突变。

我应该继续使用这些功能吗?如果是这样,我该如何测试呢?

请帮助我。

0 个答案:

没有答案