javascript - 异步函数的 Mocha 测试

标签 javascript node.js testing coffeescript mocha.js

我正在编写一个 Node 包装器来与 external api 进行交互并且很难测试异步 createJob 方法。下面是测试用例代码:

api_key = "test_0dc8d51e0acffcb1880e0f19c79b2f5b0cc"

lob     = require('../src/lob')(api_key)
should  = require("should")
chai    = require("chai")

data = 
  name: "test name"
  to: "Bob"
  from: "Alice"
  object1: "foo"
  object2: "bar"

describe "Job", ->
  @timeout(50000)
  describe "create", ->
    it "should create a job with address_id", (done) ->
      lob.jobs.createJob data, (new_job) ->
        new_job.should.not.be.empty
        new_job['name'].should.equal(data['name'])
        done()

编辑

上面的代码解决了这个问题

最佳答案

(在 coffeescript 中回答。如果您想将 coffee 转换为 js,请使用 http://coffeescript.org/,然后使用 Try CoffeeScript 选项卡。)

如果您正在测试异步代码,则需要使用done 模式:

describe "User", ->
  describe "#save()", ->
    it "should save without error", (done) ->
      user = new User("Luna")
      user.save done

http://visionmedia.github.io/mocha/在“异步代码”下。看起来 createJob 正在返回 true,因为测试正在压缩代码以发送帖子等,并说“是的,我按照你的要求发送了所有这些东西!”。

我推荐 Martin Fowler 关于使用 mocha 测试异步 js 代码的文章:http://martinfowler.com/articles/asyncJS.html .

我有一段代码可以测试从数据库中检索用户(使用 sinon 进行 stub )。真正的代码连接到数据库,然后使用用户的配置调用 onSuccess:onSuccess(config)

  describe 'Config', ->
    orgId = 'a'
    errorHandler = ((msg) -> (throw msg))
    beforeEach ->
      readConfig = sinon.stub(sdl , 'getConfig')
      readConfig.callsArgOnWithAsync(2, configSource, JSON.parse(jsonConfig))
    afterEach ->
      configSource.getConfig.restore()

...稍后

  configSource.getConfig('520bc323de4b6f7845543288', errorHandler, (config) ->
      config.should.not.be.null
      config.should.have.property('preferences')
      done()
  )

关于javascript - 异步函数的 Mocha 测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21223093/

相关文章:

javascript - 获取自定义文本之间的内容

node.js - 使用 http-proxy-middleware 在 webpack-dev-server 中保持事件选项?

ios - 在模拟器中注销 Appstore

testing - 使用 Verilog VPI 在模拟器中提前时间

angularjs - 如何在注入(inject)前模拟 Angular 模块?

javascript - this.model 不是函数

javascript - 如何在 Highcharts 中隐藏鼠标悬停时的特定点和标签

javascript - 箭头函数执行上下文在哪里?

javascript - 引用错误: Can't find variable: require - JQuery error

javascript - 在 Express-Sequelize MySql 中创建 2 个模型之间的关联