如何在Angular js中使用firebase工厂为控制器编写测试?

时间:2015-12-20 15:03:42

标签: angularjs firebase karma-jasmine

由于我与firebase-factory分开编写RecipeController,因此我的测试中出现错误。

TypeError: Cannot read property '$loaded' of undefined.

$loadedfirebase ...

中的一种方法

test.js

describe('RecipeController', function() {
beforeEach(module('leChef'));

var $controller;

beforeEach(inject(function(_$controller_){
  $controller = _$controller_;
}));

describe("$scope.calculateAverage", function() {
  it("calculates average correctly", function() {
    var $scope = {};
    var controller = $controller('RecipeController', { $scope: $scope });

    $scope.calculateAverage();

    expect(average).toBe(sum/(Recipes.reviews.length-1));
  });
});
});

火力-factory.js

app.factory("Recipes", ["$firebaseArray",
   function($firebaseArray) {
   var ref = new Firebase("https://fiery-inferno-8595.firebaseio.com/recipes/");
   return $firebaseArray(ref);
  }
]);

配方-controller.js

 app.controller("RecipeController", ["$scope", "toastr", "$location", "$routeParams", "$compile", "Recipes",
 function($scope, toastr, $location, $routeParams, $compile, Recipes) {

$scope.recipes.$loaded().then(function(payload) {
  $scope.recipe = payload.$getRecord($routeParams.id);

  $scope.html = $scope.recipe.instructions;

  if (typeof $scope.recipe.reviews === "undefined") {
    $scope.recipe.reviews = [{}];
  }

  $scope.calculateAverage = function(AverageData){
    var sum = 0;

    if ($scope.recipe.reviews.length > 1) {
      for(var i = 1; i < $scope.recipe.reviews.length; i++){
        sum += parseInt($scope.recipe.reviews[i].stars, 10);
      }

      var average = sum/($scope.recipe.reviews.length-1);
      var roundedAverage = Math.round(average);
      return { 
        average: roundedAverage,
        markedStars: new Array(roundedAverage)
      };
    } else {
      return sum;
    }
  };
});
]);

0 个答案:

没有答案