首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Jasmine无法识别从异步函数解析调用的侦听方法

Jasmine无法识别从异步函数解析调用的侦听方法
EN

Stack Overflow用户
提问于 2015-05-30 00:32:32
回答 2查看 56关注 0票数 0

从我的控制器中,在实例化时,我调用一个异步方法,该方法调用一个作用域方法:

代码语言:javascript
运行
复制
app.controller 'MyCtrl', ($scope,mySvc) ->
  ## do some initial stuff
  mySvc.asyncMethod
  .then (an_array) ->
    val = $scope.myScopedMethod

我的测试是这样的:

代码语言:javascript
运行
复制
describe "my tests", () ->
  $controller = undefined
  $scope = undefined
  $q = undefined
  createController = undefined
  mySvc = undefined

  beforeEach inject ($controller, $rootScope, $q, _mySvc_) ->
    $scope = $rootScope.$new()
    mySvc = _mySvc_
    deferred = $q.defer()
    deferred.resolve []
    spyOn(mySvc,'asyncMethod').and.returnValue deferred.promise
    spyOn($scope, 'myScopedMethod').and.callThrough()
    createController = () ->
      return $controller('MyCtrl', {$scope: $scope, mySvc: mySvc})

  # this assertion works
  it "should call asyncMethod", () ->
    controller = createController()
    expect(mySvc.asyncMethod).toHaveBeenCalled()

  # this also works
  it "should define myScopedMethod", () ->
    controller = createController()
    expect(angular.isFunction($scope.myScopedMethod)).toBe true

  # this fails with 'Error: Expected a spy, but got Function.'
  it "should call $scope.myScopedMethod", () ->
    controller = createController()
    $scope.$digest()
    expect($scope.myScopedMethod).toHaveBeenCalled()

无论我是否调用$digest(),我都会得到相同的错误。我希望$digest()能够解析asyncMethod,这样它就可以调用myScopedMethod,但有些地方不太对劲。

EN

Stack Overflow用户

发布于 2015-06-01 23:17:42

scope不是间谍

spy是使用

代码语言:javascript
运行
复制
var spy = spyOn($scope, 'myScopedMethod')

然后

代码语言:javascript
运行
复制
expect($scope.myScopedMethod)
票数 0
EN
查看全部 2 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30534679

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档