我有一项服务,可以从CDN读取的js文件中加载变量(不读取typedef)
因此,我为此创建了一个声明:
declare const externalValue: string;
@Injectable()
export class Service {
...
这一切都很好,但是当我想测试我的服务时, 我收到以下错误消息:
ReferenceError:未定义externalValue
这很有意义,因为尚未调用加载文件的index.html。
我的问题是现在测试时如何模拟该值?
答案 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
files: [
file1.js, // List of files/patterns to load in the browser.
file2.js
]
或者您可以在测试文件中声明一个全局变量。
var externalValue = "externalValue";
describe('External value tests', () => {
//
});