我需要一些有关测试第三方对象的帮助。下面是我的代码
//app.js
export const specialFunction = (offer) => {
adobe.target.applyOffer({
mbox: 'container',
offer
})
}
adobe.target.getOffer({
mbox: 'container',
success: (offer) => {
specialFunction(offer);
}
})
在我的测试文件中
//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
更改为
typeof adobe !== 'undefined' && adobe.target.getOffer({
mbox: 'container',
success: (offer) => {
specialFunction(offer);
}
})
然后测试通过,上面的adobe.target.getOffer
未测试
所以我的问题是,如何测试adobe.target.getOffer
部分?以及为什么测试会通过?似乎window.adobe = adobe
正在测试用例中
答案 0 :(得分:1)
为了将(模拟的)方法添加到全局范围,您可以在运行测试之前将它们附加到Node's global
object上。喜欢:
beforeAll(() => {
const adobe = {
target: {
getOffer: jest.fn()
}
}
global.adobe = adobe;
})