首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Jest模拟第三方对象

Jest模拟第三方对象
EN

Stack Overflow用户
提问于 2018-07-23 12:50:47
回答 1查看 478关注 0票数 4

我需要一些关于测试第三方对象的帮助。下面是我的代码

代码语言:javascript
运行
复制
//app.js
export const specialFunction = (offer) => {
   adobe.target.applyOffer({
       mbox: 'container',
       offer
   })
}


adobe.target.getOffer({
  mbox: 'container',
  success: (offer) => {
     specialFunction(offer);
  }
})

在我的测试文件

代码语言:javascript
运行
复制
//app.test.js
import { specialFunction } from './app';

beforeAll(() => {
  const adobe = {
     target: {
       getOffer: jest.fn(),
       applyOffer: jest.fn()
     }
  }
  window.adobe = adobe;
});
it('test function', () => {
    specialFunction({foo: 'bar'});
    expect(adobe.target.applyOffer).toHaveBeenCalledWith({
        mbox: 'container',
        offer: {foo: 'bar'}
    });
})

但当我开始运行它时,app.js总是报告ReferenceError: adobe is not defined,但如果我将app.js更改为

代码语言:javascript
运行
复制
typeof adobe !== 'undefined' && adobe.target.getOffer({
      mbox: 'container',
      success: (offer) => {
         specialFunction(offer);
      }
    })

然后测试通过了,上面的adobe.target.getOffer没有测试,所以我的问题是,如何测试adobe.target.getOffer部件?还有为什么测试会通过呢?看起来window.adobe = adobe正在为测试用例工作

EN

回答 1

Stack Overflow用户

发布于 2018-07-23 15:26:11

为了将(模拟的)方法添加到全局作用域,您可以在测试运行之前将它们附加到Node's global object上。像这样:

代码语言:javascript
运行
复制
beforeAll(() => {
  const adobe = {
    target: {
       getOffer: jest.fn()
    }
  }
  global.adobe = adobe;
})
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51471716

复制
相关文章

相似问题

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