首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用Vows测试Mongoose模型

使用Vows测试Mongoose模型
EN

Stack Overflow用户
提问于 2011-09-01 01:09:44
回答 2查看 885关注 0票数 3

对于整个node.js社区来说,这是相当新鲜的,我在我的第一个应用程序上进行单元测试时遇到了问题。问题是它们通过了,但它们从未在回调中实际运行过断言。据我所知,mongoose (我用来与MongoDB对话的库)使用回调来处理它的API。在我的誓言测试中,这些回调似乎不会被解雇。举个例子:

代码语言:javascript
复制
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

你知道我哪里做错了吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-09-01 01:28:51

这不是誓言的工作方式。誓言不能是异步的。对于异步测试,应该使用子主题。

伪代码(我不会写CS)

代码语言:javascript
复制
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
}

正如您所看到的,您创建了一个具有执行异步活动的主题的新上下文。然后,您可以声明有关异步活动返回的数据的内容。

票数 2
EN

Stack Overflow用户

发布于 2011-09-01 03:46:11

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

您还需要注意,当获得任何返回值( undefined除外,这等同于不返回任何内容)时,Vows将结束测试。由于CoffeeScript的隐式返回,这意味着您必须非常小心。(我公开表示支持对没有返回值的函数使用替代的-/>语法;请参阅issue 899。)

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7260762

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档