我试图在我的Mongoose模型上测试我的自定义方法,但是我在测试模型中设置的值消失并使测试失败。测试看起来像这样:
it('should get the friend id', function(){
var conversation = new Conversation({
'users': [new ObjectId('0'), new ObjectId('1')]
});
expect(conversation.getFriendId('0')).toEqual(new ObjectId('1'));
});
我的模型声明包含以下内容:
var mongoose = require('mongoose');
var ObjectId = mongoose.Schema.Types.ObjectId;
var ConversationSchema = new mongoose.Schema({
'users': [{'type': ObjectId, 'ref': 'User'}]
});
ConversationSchema.methods.getFriendId = function(userId) {
return this.users;
//return this.users[0] === new ObjectId(userId)
// ? this.users[1] : this.users[0];
};
module.exports = mongoose.model('Conversation', ConversationSchema);
当我运行测试时,我得到:
Expected [ ] to equal { path : '1', instance : 'ObjectID', validators : [ ], setters : [ ], getters : [ ], options : undefined, _index : null }.
我在测试中设置了用户,所以返回值应该是用户数组。(它在当前状态下仍然无法通过测试,但理论上应该在取消注释第二个返回语句时通过。)相反,用户数组显示为空。
如何让测试模型中的值出现在我的自定义函数中?
我改变了一些事情,让它最终发挥作用。
我将users数组更改为类似集合的对象,因为它更准确地表示了数据。集合的键是ObjectId的字符串。
要创建新的ObjectId,必须具有12字节字符串或24个字符的十六进制字符串。最初,我试着用一个一位数的字符串。我添加了一个spec帮助程序,它用24个字符的十六进制字符串存储虚拟ID。
猫鼬。模式。类型。ObjectId和猫鼬。类型。ObjectId是两个不同的东西。我尝试了每一个,然后才意识到我需要同时使用这两个。创建模式时,我需要
mongoose。模式。类型。ObjectId
。其他任何时候我引用ObjectId类型时,我都需要mongoose。类型。ObjectId
。
我试图从我定义它们以访问它们的文件中返回模型。相反,我需要调用
mongoose.model()
来获取我的模型。
有了这些变化,我的模型定义现在看起来像这样:
var mongoose = require('mongoose');
var ObjectId = mongoose.Schema.Types.ObjectId;
var ConversationSchema = new mongoose.Schema({
'users': Object,
'messages': [
{
'text': String,
'sender': {'type': ObjectId, 'ref': 'User'}
}
]
});
ConversationSchema.methods.getFriendId = function(userId) {
for (var u in this.users) {
if (u !== userId) return new mongoose.Types.ObjectId(u);
}
return null;
};
// other custom methods...
mongoose.model('Conversation', ConversationSchema);
我的测试如下所示:
describe('getFriendId()', function(){
var mongoose = require('mongoose');
var ObjectId = mongoose.Types.ObjectId;
require('../../../models/Conversation');
var Conversation = mongoose.model('Conversation');
var helper = require('../spec-helper');
it('should get the friend id', function(){
users = {};
users[helper.ids.user0] = true;
users[helper.ids.user1] = true;
var conversation = new Conversation({ 'users': users });
expect(conversation.getFriendId(helper.ids.user0)).toEqual(new ObjectId(helper.ids.user1));
});
});
问题内容: 有谁知道这是否可能?大部分用于节点检查器的示例似乎都旨在调试调用的网页。我希望能够调试茉莉花节点测试。 问题答案: 我最终写了一个名为toggle的工具: 您可以将其放入单元测试中,例如: 然后运行测试,例如:node –debug myfile.js debug。如果运行调试切换,则将一直等到ctrl-c以外的任何内容。Ctrl- c退出。您也可以重新运行,这很好。 w0000t。
我正在编写一个简单的应用程序来保存和查找位置。我用的是猫鼬和茉莉节点。 用户CRUD测试工作符合预期。但是,我单独创建了用户来测试不同的自定义验证。我还通过清除集合并重新加载所有用户来启动测试,以确保在启动save/update/etc测试之前所有测试数据都是良好的。 对于位置,我也在做同样的事情,但我有几十个位置,我想使用数组加载它们。。。并在整个过程中测试负载,确保其正常工作。 如果我只做一个
问题 假如你正在使用 CoffeeScript 写一个简单地计算器,并且想要验证其功能是否与预期一致。可以使用 Jasmine 测试框架。 讨论 在使用 Jasmine 测试框架时,你要在一个参数(spec)文档中写测试,文档描述的是代码需要测试的预期功能。 例如,我们希望计算器可以实现加法和减法的功能,并且可以正确进行正数和负数的运算。我们的 spec 文档如下列所示。 # calculator
问题内容: 我有以下控制器: 然后在茉莉花中进行以下测试: “应创建未分配用户的列表”测试失败,并显示以下错误: TypeError:’undefined’不是一个函数(评估$ browser。$$ checkUrlChange()) 我真的不知道为什么。任何帮助表示赞赏。 问题答案: 当您在angular.js和angular-mocks.js之间不匹配时,似乎会出现此问题。请确保两个文件的版本
问题内容: 我想将Mongoose模型分离到一个单独的文件中。我试图这样做: 然后,我尝试使用如下模型: 在单独的模块中引用模型是否合理? 问题答案: 基本方法看起来很合理。 作为一种选择,您可以考虑集成模型和控制器功能的“提供商”模块。这样,您可以让app.js实例化提供程序,然后可以执行所有控制器功能。app.js只需指定要实现的具有相应控制器功能的路由即可。 为了进一步整理,您还可以考虑使用
我无法在任何地方找到如何在ES自定义评分函数中测试空值的示例。根据文档,脚本是时髦的,根据日志,脚本是无痛的评估,但即使这样,我仍然对一些错误感到困惑 这似乎表明我正在尝试将双精度值cas到布尔值并提出,但我需要测试非空值。 我的评分脚本应该怎么写? 编辑:我知道在无痛中我不能使用三进制的<代码>?:运算符,所以我必须显式地编写< code>doc['xx']。值!= null。然而,对于用空值索