javascript - Jasmine 测试 : Expected undefined to equal Object

标签 javascript angularjs jasmine

我是 AngularJS 的新手。我创建了以下包含模板和关联 Controller 的组件。

angular.
module('beerDetail').
controller('BeerDetailController',  ['BeerSelection', '$scope', '$rootScope',
  function BeerDetailController(BeerSelection, $scope, $rootScope) {

    let beerSelected = BeerSelection.getBeerSelected();

    $scope.ok = () => { $rootScope.modalInstance.close() };
    $scope.beer = beerSelected;
    $scope.foodPairings = beerSelected.food_pairing.join(", ");

    this.getFormattedIngredients = (ingredients) => {...};

    this.getFormattedMethod = (method) => {...};

    $scope.allIngredients = this.getFormattedIngredients(beerSelected.ingredients);
    $scope.method = this.getFormattedMethod(beerSelected.method);
  }
]).
component('beerDetail', {
  templateUrl: '/components/beer-detail/beer-detail.template.html',
  controller: 'BeerDetailController',
});

我想测试 Controller ,我创建了以下测试来检查传入范围的啤酒是否是调用提供的啤酒:BeerSelection.getBeerSelected():

describe('BeerDetailController', function() {

  it('returns the selected beer', function() {

      beforeEach(module('beerDetail'));

      let $controller;
      let scope;
      let rootScope;
      let createController;
      let beerSelection;
      let beerSelected = {
        "id": 192,
        "name": "Punk IPA 2007 - 2010",
      };

    beforeEach(inject(function ($rootScope, $controller) {
        scope = $rootScope.$new();
        createController = function () {
          return $controller('BeerDetailController',
            {'BeerSelection': beerSelection},
            {'$scope': scope},
            {'$rootScope': rootScope}
            );
          spyOn(beerSelection, 'getBeerSelected').and.returnValues(beerSelected);
        };
    }));

    expect(scope.beer).toEqual(beerSelected);
    });
  });

但是我确实收到以下错误:

Expected undefined to equal Object({ id: 192, name: 'Punk IPA 2007 - 2010' })

可能是什么问题?

最佳答案

您必须调用 createController 方法才能实际创建它。刚刚完成了您在 beforeEach 中完成的任务。

createController();     
expect(scope.beer).toEqual(beerSelected);

应该可以工作

注册(根据评论编辑):

angular.
module('beerDetail').
controller('BeerDetailController',  {your controller function}).
component('beerDetail', {
  templateUrl: '/components/beer-detail/beer-detail.template.html',
  controller: 'BeerDetailController'
....

我认为这个灵魂工作

关于javascript - Jasmine 测试 : Expected undefined to equal Object,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42748441/

相关文章:

javascript - AngularJS - 在 ng-click 中使用数据绑定(bind) {{}}

javascript - Angular : what is the difference between '=' and '=?' while defining a scope in a directive

javascript - 如何禁用 cookie 覆盖?

javascript - 用Javascript重写单元测试可以吗?

javascript - 当我按相同的属性进行过滤时,如何查看已过滤的对象数组中属性的变化?

javascript - Textarea - br 标签的新行,然后是特殊字符

javascript - 在Google map 中获取Clicked标记并将其发送给函数

html - 如何使用 ng-click 功能更改按钮颜色?

javascript - 在 Jquery 中工作时如何使用 Jasmine 测试文本颜色?

javascript - 避免 JavaScript 测试中的误报