我有一个使用ElementRef
的方法,该方法定义如下。
@ViewChild('idNaicsRef') idNaicsRef: ElementRef;
ElementRef
然后使用.nativeElement.focus()
设置焦点。
该方法在运行规范时失败,称'undefined是一个对象'
答案 0 :(得分:2)
尽管httpNick的答案应该有效,但我最后还是向我的团队中的一位建筑师询问了这个问题,他让我找到了一个稍微不同的解决方案,可能会更简单一点。
describe(MyComponent.name, () => {
let comp: MyComponent;
describe('myFunction', () => {
it('calls focus', () => {
comp.idNaicsRef = {
nativeElement: jasmine.createSpyObj('nativeElement', ['focus'])
}
comp.myFunction();
expect(comp.idNaicsRef.nativeElement.focus).toHaveBeenCalled();
});
});
这个特定的例子只是测试是否已经调用了focus
方法。当我测试我的方法时,这是我感兴趣的测试,但你当然可以测试你想要的任何东西。关键是预先设置(在向我展示之前难以捉摸)。
答案 1 :(得分:1)
这应该有效。这只是创建一个间谍对象然后你可以用你想要的任何东西填充它,所以你甚至可以检查它是否在你的单元测试中被调用。
import createSpyObj = jasmine.createSpyObj;
comp.idNaicsRef = createSpyObj('idNaicsRef', ['nativeElement']);
comp.idNaicsRef.nativeElement = { focus: () => { }};
comp
是对您正在测试的组件的引用。
createSpyObj
来自茉莉花导入