首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >模拟返回promise的组件方法

模拟返回promise的组件方法
EN

Stack Overflow用户
提问于 2020-06-04 10:04:02
回答 2查看 39关注 0票数 0

我需要为以下原型方法validateAddress创建单元测试

代码语言:javascript
复制
import MyService from 'api/my-service';
import staticData from 'static-data';
import constants from 'utilities/constants';
import locale from 'api/locale-provider';

    const myService = new MyService();
    /**
     * @param {Object} values
     * @param {String} currency
     * @param {Object} userProfile
     * @returns {Promise<boolean>}
     */
    export const validateAddress = (
        values,
        currency,
        userProfile
    ) => {
        const countryCode = locale.getCountry();
        if (
            staticData.type === constants.BILLING_MANAGER &&
            (countryCode === 'CA' || countryCode === 'US')
        ) {
            const payload = makeAddressPayload({
                values,
                currency
            });

            return myService
                .postAddress(payload, userProfile)
                .then(() => {
                    return true;
                })
                .catch(() => {
                    return false;
                });
        }
        return true;
    };

    const makeAddressPayload = ({
       values,
       paymentProcessor,
       currency
    }) => ({
       ...
    });

有人知道如何模拟MyService类方法postAddress吗?

代码语言:javascript
复制
class MyService {

    constructor(options = {}) {
       ...
    }

    postAddress(payload, userProfile) {
    let promise = authorizedFetchRequest(
            ...
        );

        promise = fetchTimeoutHandler(promise);
        return promise;
    }
}

export default MyService;
EN

回答 2

Stack Overflow用户

发布于 2020-06-04 10:13:26

对于您的情况,您可以使用mockImplementationOnce方法模拟postAddress请求的响应。

这就是如何将其作为测试的一部分进行监视,

代码语言:javascript
复制
it('should call postAddress', () => {
  jest.spyOn(MyService, 'postAddress').mockImplementationOnce(() => (
    ...expected response
  ));
});
票数 1
EN

Stack Overflow用户

发布于 2020-06-05 03:42:10

我采纳了wentjun的建议,并最终实现了它:

代码语言:javascript
复制
const spy = jest
      .spyOn(MyService.prototype, 'postAddress')
      .mockImplementationOnce(() => {
          return new Promise(resolve => {
                resolve(fixtures.addressPostSuccess);
          });
      });

如果我想嘲笑失败:

代码语言:javascript
复制
const spy = jest
      .spyOn(MyService.prototype, 'postAddress')
      .mockImplementationOnce(() => {
           return new Promise((resolve, error) => {
                error(fixtures.addressPostFailure);
           });
      });
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62185683

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档