【问题标题】:Testing if Angular asynchronous function returns a promise fails in Jasmine在 Jasmine 中测试 Angular 异步函数是否返回一个 Promise 失败
【发布时间】: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


【解决方案1】:

您需要实际调用该方法。注意findOne()之后的括号

describe "#findOne", () ->

it "should return a promise", () ->
  expect(entitySvc.findOne().then).toBeDefined()

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-10-18
    • 1970-01-01
    • 2023-03-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多