我试图测试我在$范围内的控制器方法。该方法进行异步调用并获得承诺。当promise被解析时,结果被分配给$ scope上的一个变量。
我试图想到的测试很简单:给$ scope变量分配null,调用方法,等待调用完成,期望结果被赋值给$ 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()
为单元测试的目的,我嘲笑“someFactory”使用$ q.when()方法,据我所知,它应该在传递一个对象时立即解决。这里真的没有需要等待。这是模拟工厂:
mockSomeFactory = ($q) ->
{
find: ->
$q.when {someData: true}
}
而且使用$提供其注入控制器:
beforeEach module 'myAngularApp', ($provide) ->
$provide.factory "someFactory", mockSomeFactory
return
我试图用茉莉花的运行,等待和waitsFor方法,但没有运气。 WaitsFor总是会失败,即使在5000毫秒之后。请参阅http://plnkr.co/edit/s2OL56jVCRK0Ecyycoz0?p=preview
任何人都有过这种情况?
它的工作!非常感谢你。感谢您修复plunkr。我现在要读取有关rootScope和$ apply()的文档。 – Blaiz
没问题。您可能还应该查看$ q文档,这里的解释可以在这里看到:http://docs.angularjs.org/api/ng.$q#description_differences-between-kris-kowals-q-and-$ q – hassassin
谢谢。我能够得到特定的单元测试,只使用scope。$ digest()实际上,而不是根。$ apply()。 – Blaiz