Node.js 用誓言测试猫鼬模型
对于整个node.js社区来说都是新手,我在第一个应用程序的单元测试中遇到了麻烦。问题是它们通过了,但它们从未在回调中实际运行断言。据我所知,mongoose(我用来与MongoDB对话的库)使用回调来处理它的API。在我的誓言测试中,这些回电似乎不会被解雇。例如:Node.js 用誓言测试猫鼬模型,node.js,coffeescript,mongoose,vows,Node.js,Coffeescript,Mongoose,Vows,对于整个node.js社区来说都是新手,我在第一个应用程序的单元测试中遇到了麻烦。问题是它们通过了,但它们从未在回调中实际运行断言。据我所知,mongoose(我用来与MongoDB对话的库)使用回调来处理它的API。在我的誓言测试中,这些回电似乎不会被解雇。例如: vows = require 'vows' assert = require 'assert' mongoose = require 'mongoose' ProjectSchema = new Schema name: St
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
你知道我做错了什么吗?这不是誓言的工作方式。誓言不能是异步的。您应该使用子主题进行异步测试 伪代码(我不会写CS)
正如您所看到的,您创建了一个新的上下文,其中包含一个执行异步活动的主题。然后,您可以声明有关异步活动返回的数据的内容。我看到的一个问题是
topic.save
可能是指topic.save()
。另一个更严重的问题是,您需要使用Vows的this.callback来进行异步测试;见雷诺斯的回答
您还需要知道,当Vows获得任何返回值时(除了
未定义的
,这相当于不返回任何内容),它将结束测试。由于CoffeeScript的隐式返回,这意味着您必须非常小心。(我支持无返回值函数的备用-/>
语法;请参阅。)+1。我看到的代码中唯一的问题是,应该在每个函数的末尾添加一个显式的return
。如果Project.findById
返回任何内容,则会返回到誓言中,这将造成严重破坏。引用:“使用这个回调的主题不能返回任何东西。”@TrevorBurnham psh,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
}