【问题标题】:Using Vows to test Mongoose models使用 Vows 测试 Mongoose 模型
【发布时间】:2011-11-07 19:31:34
【问题描述】:

对整个 node.js 社区来说还是个新手,我在我的第一个应用程序上进行单元测试时遇到了问题。问题是它们通过了,但它们实际上从未在回调中运行断言。据我了解,猫鼬(我用来与 MongoDB 对话的库)使用回调来处理它的 API。在我的誓言测试中,这些回调似乎没有被触发。一个例子:

vows = require 'vows'
assert = require 'assert'
mongoose = require 'mongoose'

ProjectSchema = new Schema
  name: String    
Project = mongoose.model 'Project', ProjectSchema

mongoose.connect('mongodb://localhost/testdb');


projectBatch = vows.describe('Project').addBatch 
  'model attributes':
    topic: ()->
      new Project()
  'should have a name field': (topic)->
    topic.name = "some name"
    topic.save
    console.log "this gets executed just fine"
    Project.findById topic.id, (error, project)->
      console.log "THIS LINE NEVER RUNS!"
      assert.equal "some name", project.name

projectBatch.export module

关于我在这里做错了什么有什么想法吗?

【问题讨论】:

    标签: node.js coffeescript mongoose vows


    【解决方案1】:

    誓言不是这样运作的。誓言不能是异步的。您应该使用子主题进行异步测试

    伪代码(我不会写CS)

    topic: () -> new Project()
    'should have name': {
      'topic': (topic) ->
        topic.name = "some name"
        topic.save
        Project.findById topic.id, this.callback
        return;
      'that can be saved': (err, proj) ->
        console.log "SHOULD RUN"
        assert.equal "some name", proj.name
    }
    

    如您所见,您使用执行异步活动的主题创建了一个新上下文。然后,您就异步活动返回的数据发誓。

    【讨论】:

    • +1。我在您的代码中看到的唯一问题是您应该在每个函数的末尾添加一个明确的return。如果Project.findById 返回任何内容,那将返回给 Vows,这将造成严重破坏。引用the docs:“使用this.callback 的主题不得返回任何内容。”
    • @TrevorBurnham psh,CS很烦人,默认返回东西¬_¬
    • 谢谢你,这让我走上了正确的道路,现在事情变得更有意义了 :)
    【解决方案2】:

    我看到的一个问题是topic.save 是无操作的——你可能是指topic.save()。另一个更严重的问题是您需要使用 Vows 的this.callback 进行异步测试;请参阅 Raynos 的回答。

    您还需要注意,Vows 在获得 any 返回值时结束测试(undefined 除外,这相当于不返回任何内容)。由于 CoffeeScript 的隐式返回,这意味着您必须非常小心。 (据记录,我支持没有返回值的函数的备用 -/> 语法;请参阅 issue 899。)

    【讨论】:

      猜你喜欢
      • 2011-11-03
      • 2018-08-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-11-19
      • 1970-01-01
      • 1970-01-01
      • 2021-02-08
      相关资源
      最近更新 更多