无法在angular / jasmine

时间:2015-05-26 14:46:13

标签: angularjs unit-testing jasmine promise

我正在尝试以角度测试异步方法。这是来自我的控制器的代码:

if $routeParams.mode == "new"
  # some stuff
  mySvc.GetMyStuff $routeParams.id
  .then (stuff) ->
    if stuff? and stuff.length > 1
      # do more stuff
    else 
      $scope.stuff = 'foo'

我的测试:

describe "test stuff",
  $q = {}
  $scope = {}
  controller = {}
  mySvc = {}

  beforeEach inject ($controller, $rootScope, _$q_, _$routeParams_, _mySvc_)
    $q = _$q_
    $routeParams: _$routeParams_
    $scope = $rootScope.$new()
    myCtrl = $controller('MyCtrl',{
      $scope:$scope
      $routeParams: {mode: "new"}        
    })
     # create a promise to be resolved
     d = $q.defer()
     d.resolve 'foo'  # resolving with an empty array to test 'no results' condition
     spyOn(mySvc,'GetMyStuff').and.returnValue d.promise


  # later
    it "should set stuff to an 'foo'", () ->
      mySvc.GetMyStuff "id"
      $scope.$apply()
      expect($scope.stuff).toBe 'foo'   # Expected undefined to be 'foo'

我也尝试从$scope.$apply()块调用beforeEach,并尝试使用简单的字符串而不是空数组。我期望异步操作返回的数据等于一个空数组,这应该触发将$stuff设置为'foo'的条件。似乎没有使用我已解析的值调用.then

编辑:添加了一些丢失的代码,以便示例更清晰。

0 个答案:

没有答案