title: Jasmine test function that uses a private variable
body: <p>I'm trying to test one of my functions, but part of it uses a private variable from the controller.
  How can I get Jasmine to fake the data from that private variable?</p>
  
  <pre><code>window.MyApp = window.MyApp || {};
  
  
  (function(myController) {
  
      var deliverablesKoModel;
  
      myController.initialize = function(releaseId) {
  
          // Ajax call with this success:
  
          deliverablesKoModel = new knockOutModel(data); // this model contains an observable array named 'deliverables'
  
      };
  
       myController.checkDeliverableNameIsValid = function (deliverable) {
  
          var valid = false;
  
          if (ko.unwrap(deliverable.name) !== null &amp;&amp; ko.unwrap(deliverable.name) !== undefined) {
              // PROBLEM HERE
              // when running the test deliverablesKoModel below is always undefined!
              /////////////
              valid = _.all(deliverablesKoModel.deliverables(), function(rel) {
                  return (ko.unwrap(rel.name).trim().toLowerCase() !== ko.unwrap(deliverable.name).trim().toLowerCase()
                      || ko.unwrap(rel.id) === ko.unwrap(deliverable.id));
              });
  
          }
  
          deliverable.nameIsValid(valid);
  
          return valid;
      };
  
  
  }(window.MyApp.myController = window.MyApp.myController || {}));
  </code></pre>
  
  <p>My Jasmine test. I tried having deliverablesKoModel be a global variable but it's always out of scope when hitting the method above.</p>
  
  <pre><code>describe("checkDeliverableNameIsValid should", function () {
      var deliverable;
      beforeEach(function () {
          window['deliverablesKoModel'] = {
              deliverables: function() {
                  return fakeData.DeliverablesViewModel.Deliverables; // this is a json object matching the deliverables in the knockout model
              }
          };
  
          deliverable = {
              id: 1,
              name: "test 1",
              nameIsValid: function(isValid) {
                  return isValid;
              }
          };
      });
  
      it("return false if any deliverable already exists with the same name", function () {
          var valid = myApp.myController.checkDeliverableNameIsValid(deliverable);
  
          expect(valid).toBe(false);
      });
  
  });
  </code></pre>