【发布时间】:2014-02-14 22:26:27
【问题描述】:
我正在尝试测试我在 $scope 上的控制器方法。该方法进行异步调用并返回承诺。当 promise 被解析时,结果被赋值给 $scope 上的一个变量。
我试图提出的测试很简单:将 null 分配给 $scope 变量,调用方法,等待调用完成,期望将结果分配给 $scope 变量。
由于某种原因,承诺永远不会解决。见http://plnkr.co/edit/qxs5Y54NvhA24Fk4MPv2?p=preview
这里是控制器方法:
$scope.getSomething = ->
someFactory.find().then (response) ->
$scope.newValues = response.data
现在我正在尝试测试它:
it 'should get something', ->
scope.newValues = {}
scope.getSomething()
expect(scope.newValues.someData).toBeDefined()
出于单元测试的目的,我正在使用 $q.when() 方法模拟“someFactory”,据我所知,该方法在传递对象时应该立即解决。这里真的不需要等待。这是模拟工厂:
mockSomeFactory = ($q) ->
{
find: ->
$q.when {someData: true}
}
并使用 $provide 将其注入控制器:
beforeEach module 'myAngularApp', ($provide) ->
$provide.factory "someFactory", mockSomeFactory
return
我尝试使用 Jasmine 的运行、等待和 waitsFor 方法,但没有成功。 WaitsFor 总是会失败,即使在 5000 毫秒之后也是如此。见http://plnkr.co/edit/s2OL56jVCRK0Ecyycoz0?p=preview
以前有人遇到过这种情况吗?
【问题讨论】:
标签: angularjs unit-testing asynchronous jasmine promise