【问题标题】:How to mock/stub react-native-firebase?如何模拟/存根 react-native-firebase?
【发布时间】:2018-11-23 23:22:20
【问题描述】:

有谁知道为什么这不起作用?

我的 api 调用:

import firebase from 'react-native-firebase';

export default function getAuth() {
  return new Promise((resolve) => {
    firebase.auth().onAuthStateChanged((user) => {
      resolve(user);
    });
  });
}

我的单元测试失败,“预期要调用一个断言,但收到零个断言调用”。

import firebase from 'react-native-firebase';

import getAuth from '../'; // eslint-disable-line

jest.mock('react-native-firebase', () => {
  return {
    auth: () => {
      return {
        onAuthStateChanged: () => {
          return Promise.resolve({
            name: 'Shaun',
          });
        },
      };
    },
  };
});

it('resolves a promise containing the user', async () => {
  expect.assertions(1);
  const response = await getAuth();
  expect(response).toEqual({ name: 'Shaun' });
});

【问题讨论】:

  • 我有 1 条反馈表明您的问题标题误导了您。人们不会unit test 3rd 方库/工具的代码。 => 应该是“如何mock/stub/fake react-native-firebase?”使用正确的词将帮助他人更好地帮助您:)
  • 感谢@Khoa!您说得很好,我已经编辑了标题以反映您的更改。

标签: firebase react-native testing jestjs react-native-firebase


【解决方案1】:
  • 您返回了一个已解决的承诺 => 之后将不会调用任何内容。
  • 您的onAuthStateChanged 是一个带有回调的函数

相反,将onAuthStateChanged 的实现替换为:

onAuthStateChanged: jest.fn(cb => cb({ name: 'Shaun' }));

【讨论】:

  • 谢谢!我用你的替换了我的 onAuthStateChanged 实现,但我仍然收到相同的错误:“超时 - 在 jest.setTimeout 指定的 5000 毫秒超时内未调用异步回调。” “预期调用一个断言,但收到零个断言调用。”
  • 哇很奇怪:)。您能否澄清一下:您使用的是setTimeout 还是jest.setTimeout
  • @ShaunSaker:我的旧答案不正确,因为我没有仔细阅读您的代码。我更新了答案:) 希望它有所帮助。
  • 谢谢!我花了几个小时试图解决这个问题。您的回答很有意义并且有效!非常感谢您的帮助,周末愉快!
  • 另外,我在这个答案中写了我如何使用 react-native-firebase stackoverflow.com/questions/52815957/… 进行测试,这对你来说可能很有趣。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-11-02
  • 2017-06-08
  • 1970-01-01
  • 2016-07-11
  • 1970-01-01
  • 1970-01-01
  • 2020-11-06
相关资源
最近更新 更多