让我说我有一个角度为6的组件,方法test
会返回一些值:
import { doSomething } from './helper';
@Component({
...
})
export class AppComponent {
test() {
const data = doSomething(1);
return data.something ? 1: 2;
}
}
doSomething
只是一个简单的辅助函数:
export function doSomething() {
return { something: 1 };
}
是否可以在单元测试中模拟或监视此函数(因此我可以控制其returnValue)?或者我是否必须在组件中更改我的方法?
请注意:doSomething()
可以是lodash函数,const,类等。我只是想尽可能简单地保持示例。
我尝试的事情:
SpyOn
无法正常工作,因为功能未附加到任何内容
将模拟函数导入imports
TestBed.configureTestingModule
数组Unexpected value 'doSomething' imported by the module 'DynamicTestModule'. Please add a @NgModule annotation.
为它创建服务有效,但必须为每个导入的函数创建服务感到愚蠢
答案 0 :(得分:8)
在您的spec文件中以这种方式导入帮助程序:
druid.segmentCache.locations
在你的it()中,你可以监视辅助对象并返回请求的值:
import * as helper from './helper';
答案 1 :(得分:0)
模拟外部函数是不可能的,但您可以执行以下操作,这样可以正常工作。
import { doSomething } from './helper';
@Component({
...
})
export class AppComponent {
const doSomethingRef = doSomething;
test() {
const data = this.doSomethingRef(1);
return data.something ? 1: 2;
}
}
现在,因为我们可以模拟 doSomethingRef
describe('AppComponent ', () => {
let appComponent: AppComponent ;
beforeEach(() => {
TestBed.configureTestingModule({});
appComponent= TestBed.inject(AppComponent);
});
it('should allow mocking', () => {
(appComponent as AppComponent).doSomethingRef = jasmine.createSpy('doSomethingRef ').and.returnValue(1);
expect(guard.test()).toEqual(1);
});
}