【发布时间】:2015-06-22 21:01:27
【问题描述】:
我正在尝试测试异步调用是否返回一个承诺并且它失败了。我正在测试的功能:
findOne: (collection, query) ->
@find collection, query
其中find 是简单地调用$http.post 的函数
失败的规范:
describe "#findOne", () ->
it "should return a promise", () ->
expect(entitySvc.findOne.then).toBeDefined()
为什么会失败? find 只是返回由$http.post 返回的httpPromise 对象。
【问题讨论】:
-
你能贴出 find 的正文吗?你在嘲笑你的 httpBackend 吗?
-
不,我不是在规范中嘲笑
$httpBackend。这是find的正文: find: (collection, query) -> $http.post server + "/api/v1/findJson/#{collection}", query -
我不明白为什么我需要模拟
$httpBackend,如果我已经在对find的测试中模拟它:它“应该向正确的 URL 发出请求”,() -> $httpBackend.expectPOST(server+"/api/v1/findJson/blocks",{}).respond(200,{id:1}) mySvc.find 集合,queryNone $httpBackend.flush() 我试过嘲笑@987654332 @ 在我的findOne规范中,产生了一个错误No pending request to flush ! -
我不熟悉CoffeeScript,所以这可能是错误的,但是你在调用函数吗?在我看来你不是;如果是这样,您希望它如何返回承诺?
-
我认为 Nikos 是对的。
findOne.then不会被定义,因为findOne没有在预期中被调用。
标签: angularjs unit-testing coffeescript jasmine promise