【问题标题】:How to access external javascript methods / objects when using Jest?使用 Jest 时如何访问外部 javascript 方法/对象?
【发布时间】:2017-03-28 15:14:51
【问题描述】:

我目前正在使用 JEST 并使用 jasmine 来测试我的 reactJs 应用程序。有一个 javascript 文件托管在不同的供应商网站上,我需要访问该外部 js 文件中的方法/对象。

注意:应用程序在页面加载时加载这个外部 js,我可以访问应用程序中的所有方法。

对象和方法在这里可用:

http://domain/scripts/vendor1/emd.js

我正在尝试访问一个对象 (bbo),用必要的详细信息加载它并 推它,但我不知道如何访问

示例函数:

function pushEvent(obj){
 bbo.setVar( obj.param1,obj.value1);
 bbo.setVar(obj.param2,obj.value2);
 bbo.pushEvent(eventAction,eventParameters.eventCode,eventParameters);
}

样本测试:

 it("should call customLinkClick function",() => {
        reporting.pushEvent(obj);
        expect(reporting.pushEvent).toHaveBeenCalled();
    });

我可以下载 JS 并在本地进行测试,但我试图避免这种情况。

【问题讨论】:

  • 使用 jsdom.env 来拉入你的外部脚本,虽然我不确定你为什么不只需要你的依赖项。

标签: javascript reactjs jasmine jestjs


【解决方案1】:

要测试在bbo.pushEvent 上调用了什么东西,你必须监视它。

bbo通过在页面中加载外部文件在应用的全局命名空间中可用时,您必须在测试中自己创建对象。

global.bbo = {
  setVar: jest.fn(),
  pushEvent: jest.fn()
}
it("should call customLinkClick function", () = > {
  reporting.pushEvent(obj);
  expect(global.bbo.pushEvent).toHaveBeenCalled();
});

如果你将bbo 导入到你的模块中,那么你必须模拟它:

import bbo from 'bbo'
jest.mock('bbo', () = > ({
  setVar: jest.fn(),
  pushEvent: jest.fn()
}))
it("should call customLinkClick function", () = > {
  reporting.pushEvent(obj);
  expect(bbo.pushEvent).toHaveBeenCalled();
});

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-01-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-17
    • 1970-01-01
    • 1970-01-01
    • 2014-05-05
    相关资源
    最近更新 更多