我根据此规范在模型上创建了一个实例函数:
describe('Instance methods', function() {
var task;
beforeEach(function() {
return Task.create({
name: 'task',
}).then(function(_task) {
task = _task;
});
});
describe('addChild', function() {
it('should return a promise for the new child', function() {
return task.addChild({ name: 'task2' }).then(function(child) {
expect(child.name).to.equal('task2');
expect(child.parentId).to.equal(task.id);
});
});
});
..... more not applicable
});
就是这样,但我没有回来......
Task.prototype.addChild = function(task) {
return Task.create(task.name).then(function(task) {
console.log('task', task);
return task;
});
};
如规范中所述:
应该返回对新孩子的承诺
根据控制台:
任务实例方法addChild应该返回新的承诺 子:
这是我要回来的错误:
SequelizeValidationError: Validation Error
那么我没有在数据库中添加此任务我做错了什么?
我没有正确使用create
方法吗?
提前致谢!
更新
我试过了:
Task.prototype.addChild = function(task) { var task = Task.build({
name: task['name'] }); return task.save(); };
但我回来了,
AssertionError: expected null to equal 1
答案 0 :(得分:1)
我认为在您的实施中存在一些错误:
根据您的测试,使用名称和parentId描述任务。
但是当你创建任务时,你会通过addChild传递{name:'toto'}
并且您直接传递Task.create
task.name
无法正常工作,该方法尝试接收对象。
所以反而是那个
Task.prototype.addChild = function(task) {
return Task.create(task.name).then(function(task) {
console.log('task', task);
return task;
});
};
试试这个:
Task.prototype.addChild = function(task) {
return Task.create(task).then(function(task) {
console.log('task', task);
return task;
});
};
// Than you call like this
await Task.addChild({
name: 'name',
parentId: 1
});
// OR
Task.addChild({
name: 'name',
parentId: 1
}).then(() => // something);
答案 1 :(得分:0)
create方法接受一个可选参数,这是create方法的结果对象。除了将新任务实例的名称分配给task.name之外,您还必须传递parentId,它是新任务实例的外键。使用“ 1”将帮助您通过此规范,但是您将需要使用this.id(这是调用addChild方法的初始实例)。
Task.prototype.addChild = function(task) {
return Task.create({
name: task.name,
parentId: this.id
});
}