使用__mocks__手动模拟无法正常工作

时间:2019-04-08 10:11:30

标签: javascript node.js jes

我正在尝试向正在开发的节点应用程序添加一些测试。我仔细阅读了有关手动嘲笑的文档,并尝试按照说明创建 mocks 文件夹。请在下面找到文件夹结构。

app
 - firebase
  - fb.js
  - __mocks__
    - fb.js
    - firebase-admin.js
 - resolvers
    - mutation.js
__tests__
 - user.spec.js

如您所见,我尝试模拟两个模块,fb.js(用户模块)和firebase-admin.js(node_modules模块)。 firebase-admin.js模拟工作没有任何问题。但是用户模块模拟甚至还没有被玩笑所接受。实际的fb.js模块一直在被调用。

我曾尝试为项目中的各种用户模块创建 mocks 目录,但都没有找到。我还缺少任何额外的配置吗?目前,我正在通过仅模拟firebase-admin节点模块来解决此问题。但是我想模拟用户模块而不是firebase-admin模块,以便也模拟我的firebase配置。请让我知道是否需要更多信息。

__ mocks __ / fb.js

module.exports = {
   auth: jest.fn(() => "testing")
};

__ mocks __ / fb-admin.js

module.exports = {};

__ tests __ / user.spec.js

const request = require('supertest');
const server = require('../app').createHttpServer({});

const app = request(server);

describe('login resolvers', () => {
  test('should sign up user', async () => {
    const response = await app.post('/')
      .send({
        query: `mutation {
          signUp(idToken: "esd45sdfd...") {
            user {
              id
              locked
              revoked
            }
          }
        }
        `,
      })
      .set('Accept', 'application/json')
      .expect(200);
    console.log(response.text);
  });
});

app / resolvers / mutation.js

const admin = require('../firebase/fb');

/* other app code here */

1 个答案:

答案 0 :(得分:0)

从文档中

  

当我们在测试中需要该模块时,需要明确调用jest.mock('./ moduleName')。

     

如果您要模拟的模块是Node模块(例如:lodash),则模拟应放置在与node_modules相邻的 mocks 目录中(除非您将根配置为指向除以下以外的文件夹)项目根目录),并将被自动模拟。 无需显式调用jest.mock('module_name')。