Jasmine replace the return value of function being spied on

Uses Jasmine 3.5

by Joe Wilson

HTML

<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/jasmine/3.5.0/jasmine.min.css">
<script src="https://cdnjs.cloudflare.com/ajax/libs/jasmine/3.5.0/jasmine.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jasmine/3.5.0/jasmine-html.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jasmine/3.5.0/boot.min.js"></script>

JavaScript

// Code under test
var MyApp = function () {
    var getFlag = function () {
        return false;
    };

    var useFlagForSomething = function () {
        if (this.getFlag() === true) {
            return "It was true";
        } else {
            return "It was false";
        }
    };

    return {
        getFlag: getFlag,
        useFlagForSomething: useFlagForSomething
    };
};

// Specs
describe("Testing spies", function () {

    it("Should replace the return value of function being spied on", function () {
        // Arrange
        var myApp = new MyApp();
        spyOn(myApp, "getFlag").and.returnValue(true);

        // Act
        var result = myApp.useFlagForSomething();

        // Assert
        expect(result).toEqual("It was true");
    });

});