Google Cloud Datastore开玩笑Node.js node_modules

jcg*_*582 5 node.js npm google-cloud-datastore jest

我试图通过模拟runQuery和createQuery函数对下面的listEntities函数进行单元测试。也许我应该放弃并使用仿真器进行集成测试。反正这是我的代码

实现方式:

const Datastore = require('@google-cloud/datastore');
const datastore = Datastore(); 

const runQueryDS = query => (datastore.runQuery(query));   
const createQueryDS = kind => (datastore.createQuery(kind));

export const listEntities = (kind, runQuery = runQueryDS, createQuery = createQueryDS) => {
  console.log('listEntities');
  const query = createQuery(kind);
  runQuery(query)
    .then(results => (results[0]));
};
Run Code Online (Sandbox Code Playgroud)

测试:

import { listEntities } from './datastore.api';

describe('datastore api', () => {
  describe('listEntities', () => {
    test('should return list of items', () => {
      console.log('begin test');
      const kind = 'TestRun';
      const createdQuery = 'createdQuery';
      const expectedResult = ['returnedFromQuery'];
      const returnedFromExecutedQuery = [expectedResult];

      const createQuery = jest.fn().mockImplementation(() => (createdQuery));
      const runQuery = jest.fn().mockImplementation(() => (returnedFromExecutedQuery));

      const result = listEntities(kind, runQuery, createQuery);
      expect(result).toEqual(expectedResult);
    });
  });
});
Run Code Online (Sandbox Code Playgroud)

这是我得到的错误

 FAIL  app/datastore.api.test.js
? Test suite failed to run

Cannot find module './datastore_client_config' from 'datastore_client.js'

  at Resolver.resolveModule (node_modules/jest-resolve/build/index.js:191:17)
  at Object.<anonymous> (node_modules/@google-cloud/datastore/src/v1/datastore_client.js:30:18)
Run Code Online (Sandbox Code Playgroud)

谢谢!

sli*_*wp2 1

应首先完成单元测试,然后进行集成测试。单元测试比集成测试更容易编写,并且隔离性好,不依赖外部服务,无副作用,可以在不同的环境中运行。

\n

这是单元测试解决方案:

\n

index.js:

\n
const Datastore = require(\'@google-cloud/datastore\');\nconst datastore = Datastore();\n\nconst runQueryDS = (query) => datastore.runQuery(query);\nconst createQueryDS = (kind) => datastore.createQuery(kind);\n\nconst listEntities = (kind, runQuery = runQueryDS, createQuery = createQueryDS) => {\n  console.log(\'listEntities\');\n  const query = createQuery(kind);\n  return runQuery(query).then((results) => results[0]);\n};\n\nmodule.exports = { listEntities };\n
Run Code Online (Sandbox Code Playgroud)\n

index.test.js:

\n
const { listEntities } = require(\'./\');\nconst Datastore = require(\'@google-cloud/datastore\');\n\njest.mock(\'@google-cloud/datastore\', () => {\n  const mDatasotre = {\n    runQuery: jest.fn(),\n    createQuery: jest.fn(),\n  };\n  return jest.fn(() => mDatasotre);\n});\n\ndescribe(\'47128513\', () => {\n  describe(\'#listEntities\', () => {\n    afterAll(() => {\n      jest.resetAllMocks();\n    });\n    it(\'should list entities\', async () => {\n      const mDatastore = Datastore();\n      mDatastore.createQuery.mockReturnValueOnce(\'fake query\');\n      mDatastore.runQuery.mockResolvedValueOnce([{ id: 1 }]);\n      const actual = await listEntities(\'kind\');\n      expect(actual).toEqual({ id: 1 });\n      expect(mDatastore.createQuery).toBeCalledWith(\'kind\');\n      expect(mDatastore.runQuery).toBeCalledWith(\'fake query\');\n    });\n  });\n});\n
Run Code Online (Sandbox Code Playgroud)\n

带有覆盖率报告的单元测试结果:

\n
 PASS  src/stackoverflow/47128513/index.test.js (12.111s)\n  47128513\n    #listEntities\n      \xe2\x9c\x93 should list entities (12ms)\n\n  console.log src/stackoverflow/47128513/index.js:355\n    listEntities\n\n----------|----------|----------|----------|----------|-------------------|\nFile      |  % Stmts | % Branch |  % Funcs |  % Lines | Uncovered Line #s |\n----------|----------|----------|----------|----------|-------------------|\nAll files |      100 |      100 |      100 |      100 |                   |\n index.js |      100 |      100 |      100 |      100 |                   |\n----------|----------|----------|----------|----------|-------------------|\nTest Suites: 1 passed, 1 total\nTests:       1 passed, 1 total\nSnapshots:   0 total\nTime:        13.865s, estimated 15s\n
Run Code Online (Sandbox Code Playgroud)\n

源代码:https ://github.com/mrdulin/jest-codelab/tree/master/src/stackoverflow/47128513

\n