我正在使用Jasmine测试套件,其中包括"vanilla"Jasmine测试以及一些Angular 2组件的Jasmine测试.由于Angular 2的包含,zone.js被加载.这与Jasmine的时钟产生了冲突.例如,以下测试失败并显示错误,Error: Jasmine Clock was unable to install over custom global timer functions. Is the clock already installed?
describe('an async test with zone.js present', function() {
beforeEach(function() {
jasmine.clock().install();
});
afterEach(function() {
jasmine.clock().uninstall();
});
it('cannot install jasmine\'s mock clock', function() {
var callback = jasmine.createSpy('setTimeoutCallback')
setTimeout(callback, 55);
jasmine.clock().tick(56);
expect(callback).toHaveBeenCalled();
});
})
Run Code Online (Sandbox Code Playgroud)
这里是plunker为上述代码.
如果没有与"香草"测试分开提供Angular 2测试,我想知道可能有哪些选项.例如,是否可以使用区域执行Jasmine时钟的工作?例如,是否可以在声明之前模拟带区域的刻度或刷新所有计划任务?
我有点不确定如何使用EmbeddedViewRef的context变量.根据我从Angular 2的changelog中收集的内容,该context变量将the setLocal和getLocalmethods 替换为在嵌入视图中设置局部变量的机制.
在查看了这个使用的博客文章后,setLocal我将以下最小的例子拼凑在一起:
import { Directive, TemplateRef, ViewContainerRef } from '@angular/core'
export class FooTemplateContext {
constructor(public bar: string, public baz: string, public qux: string) {}
}
@Directive({
selector: '[foo]'
})
export class Foo {
constructor(viewContainerRef: ViewContainerRef, templateRef: TemplateRef<FooTemplateContext>) {
let context = new FooTemplateContext('bar', 'baz', 'qux');
let view = viewContainerRef.createEmbeddedView(templateRef, context);
}
}
Run Code Online (Sandbox Code Playgroud)
import {Component, NgModule} from '@angular/core'
import {BrowserModule} from '@angular/platform-browser'
import { Foo …Run Code Online (Sandbox Code Playgroud)