Let's say i have an angular 6 component with a method test
which returns some value:
import { doSomething } from './helper'; @Component({ ... }) export class AppComponent { test() { const data = doSomething(1); return data.something ? 1: 2; } }
doSomething
is just a simple helper function:
export function doSomething() { return { something: 1 }; }
Is it possible to mock or spy this function in a unit test (so i can control its returnValue)? Or do i have to change my approach in the component?
Please note: doSomething()
can be a lodash function, a const, a class etc. I just tried to keep the example as simple as possible.
Things i've tried:
SpyOn
doesn't work because function is not attached to anything
Importing an mock-function into the imports
array of TestBed.configureTestingModule
gives Unexpected value 'doSomething' imported by the module 'DynamicTestModule'. Please add a @NgModule annotation.
Creating a service for it works but it feels silly to have to create services for each imported function
To mock an imported function with Jest we use the jest. mock() function. jest. mock() is called with one required argument - the import path of the module we're mocking.
var service = new MockLoginService(); beforeEachProviders(() => [ provide(TestService, { useValue: service })]); it('should load languages', inject([TestComponentBuilder], (tcb: TestComponentBuilder) => { tcb . createAsync(LoginComponent). then((fixture) => { let element = fixture.
Introduction. Mocking is a great idea for testing Angular apps because it makes maintenance easier and helps reduce future bugs. There are a few complex tools, such as XUnit, for mocking an Angular CLI project. You can execute the mocking methods described in this guide only if you use vanilla Jasmine + Angular Testbed ...
In your spec file import the helper this way:
import * as helper from './helper';
And in your it() you can spy on the helper object and return the requested value:
spyOn(helper, 'doSomething').and.returnValue({});
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With