Search code examples
angularkarma-jasmineoffice-jsangular14karma-coverage

"Some of your tests did a full page reload!" error while running karma jasmine unit test cases in angular 14 application


When I am trying to run karma jasmine unit test cases in my angular 14 application, I am getting below error.

Error Message: "Some of your tests did a full page reload!"

karma.confg.js:

module.exports = function (config) {
    config.set({
        basePath: '',
        frameworks: ['jasmine', '@angular-devkit/build-angular'],
        plugins: [
            require('karma-jasmine'),
            require('karma-chrome-launcher'),
            require('karma-jasmine-html-reporter'),
            require('karma-coverage'),
            require('@angular-devkit/build-angular/plugins/karma')
        ],
        files: [
            'https://appsforoffice.microsoft.com/lib/1.1/hosted/office.js'
        ],
        client: {
            clearContext: false // leave Jasmine Spec Runner output visible in browser
        },
        jasmineHtmlReporter: {
            suppressAll: true // removes the duplicated traces
        }
   });
};

enter image description here

I have noticed window.location.href code in office.js CDN file. How to resolve this issue?

enter image description here


Solution

  • EDIT: Since writing this, I've learned that I was wrong. My answer represents a short-sighted and "old-fashioned" way of viewing unit tests. A more modern take on unit tests (and, imo, a better one) is to test units of behaviour rather than units of code.

    I do, however, maintain that mocking your external dependency for unit testing makes sense, especially when it comes to Office.

    When unit testing, all dependencies should be mocked, otherwise it's not really a unit test. Remember, the aim is generally to test as small a slice of code as possible.

    In your current case, Office is playing havoc with your tests because you are importing the real dependency. Create a mock which contains the necessary methods and remove the Office dependency (along with any others) and it should clear the problem right up.

    You may wish to look into the Façade pattern, as it can help separate your code from dependencies, making testing much easier.