【问题标题】:mock declare const in jasmine test在茉莉花测试中模拟声明 const
【发布时间】:2018-12-17 21:19:50
【问题描述】:

我有一个服务,我从一个从 CDN 获取的 js 文件加载一个变量(读取没有 typedef)

因此我为它创建了一个声明:

declare const externalValue: string;

@Injectable() 
export class Service {
...

这一切都很好,但是当我想测试我的服务时, 我收到以下错误消息:

ReferenceError: externalValue 未定义

这很有意义,因为加载文件的 index.html 尚未被调用。

我现在的问题是当我测试它时如何模拟这个值?

【问题讨论】:

    标签: javascript angular typescript jasmine


    【解决方案1】:

    您可以使用 window 对象使值可用:

    window['externalValue'] = 'woww';
    

    如果你的 typescript 是严格的,你首先必须扩展全局窗口对象。这个定义中的global 并不是必须的,但是如果你把它放在一个文件中,每个文件都会被加载(比如polyfills.ts),你只需要声明一次。

    declare global { interface Window { externalValue: string; } }
    

    那么你可以这样做:

    window.externalValue = 'even more wow';
    

    【讨论】:

    • 感谢这真的有帮助
    【解决方案2】:

    可以像这样在karma.conf.js中添加测试运行时浏览器需要加载的js文件。在他们的official documentation

    中阅读更多 abpout 业力配置
    files: [
       file1.js, // List of files/patterns to load in the browser.
       file2.js
    ]
    

    或者你可以在测试文件中声明一个全局变量。

    var externalValue = "externalValue";
    
    describe('External value tests', () => {
        //
    });
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-03-27
      • 2015-08-25
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多