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

met*_*ard 4 javascript jasmine typescript angular

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

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

declare const externalValue: string;

@Injectable() 
export class Service {
...
Run Code Online (Sandbox Code Playgroud)

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

ReferenceError:未定义externalValue

这是完全合理的,因为尚未调用加载文件的index.html.

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

Pie*_*Duc 6

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

window['externalValue'] = 'woww';
Run Code Online (Sandbox Code Playgroud)

如果你有严格的打字稿,首先必须扩展全局窗口对象.在global这个定义中是不是真的有必要,但如果你把它在被加载为每个文件的文件(像polyfills.ts),你只需要一次申报.

declare global { interface Window { externalValue: string; } }
Run Code Online (Sandbox Code Playgroud)

然后你可以这样做:

window.externalValue = 'even more wow';
Run Code Online (Sandbox Code Playgroud)