Showing posts with label jasmine. Show all posts
Showing posts with label jasmine. Show all posts

Nov 15, 2021

Jasmine in Angular Unit-test: Modify a Read-only value with "Object.definedProperty"

If you are using Typescript and when you're not as well-versed with it (like I do), then surely you'll come into type issue from time to time.

If unlucky, eslint will also give you some headache time during your development work too, but that's good sign that you are learning.

Problems

Modifying a read-only value in Angular Unit-Test (*.spec.ts) files will give you warning like below:

Cannot assign a value to a read-only property even on Unit Test script

the routerSpy is a mocked Router from '@angular/router'.

let routerSpy: jasmine.SpyObj<Router>;


Solution

With the help from native Javascript Object.defineProperty(), we can set value manually through method below:

Set value through Object.defineProperty


Aug 17, 2021

Unit test on Angular with Jasmine, test case executed randomly

 Problems

If your written unit test is written in an order that has test like:
expect(modalCtrlSpy.dismiss.calls.count()).toBe(1);

The "count()" is accumulated throughout the test cases from the start until the end of a "described" scenario. If test cases get executed without following the order as written test, it fails due to "count()" result get accumulated differently across the test. It can't match the "expected" accumulated result if test run randomly.

Solution

In the karma.conf.js file, add "random: false" under client.jasmine object to prevent test case being executed randomly.