模拟在茉莉花测试中声明const

时间:2018-07-10 06:12:09

标签: javascript angular typescript jasmine

我有一项服务,可以从CDN读取的js文件中加载变量(不读取typedef)

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

declare const externalValue: string;

@Injectable() 
export class Service {
...

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

  

ReferenceError:未定义externalValue

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

我的问题是现在测试时如何模拟该值?

2 个答案:

答案 0 :(得分:6)

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

window['externalValue'] = 'woww';

如果您的打字稿严格,则必须首先扩展全局窗口对象。此定义中的global并不是必须的,但是如果将其放置在每个文件都加载的文件中(例如polyfills.ts),则只需声明一次即可。

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

那么您可以做:

window.externalValue = 'even more wow';

答案 1 :(得分:1)

像这样在测试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', () => {
    //
});