不要怂,就是干,撸起袖子干!

Commit 79c5730a by Mick Hansen

Merge branch 'ryanking8215-test/setter_function'

2 parents c9e23615 f160a66a
...@@ -241,7 +241,7 @@ module.exports = (function() { ...@@ -241,7 +241,7 @@ module.exports = (function() {
result = Dot.transform(result); result = Dot.transform(result);
var joinTableData = result[this.options.joinTableModel.name] var joinTableData = result[this.options.joinTableModel.name]
, joinTableDAO = this.options.joinTableModel.build(joinTableData, { isNewRecord: false, isDirty: false }) , joinTableDAO = this.options.joinTableModel.build(joinTableData, { isNewRecord: false, isDirty: false, raw: true })
, mainDao; , mainDao;
delete result[this.options.joinTableModel.name]; delete result[this.options.joinTableModel.name];
......
...@@ -442,5 +442,71 @@ describe(Support.getTestDialectTeaser("Model"), function () { ...@@ -442,5 +442,71 @@ describe(Support.getTestDialectTeaser("Model"), function () {
}); });
}); });
}); });
describe('set', function () {
it('should only be called once when used on a join model called with an association getter', function () {
var self = this;
self.callCount = 0;
this.Student = this.sequelize.define('student', {
no: {type:Sequelize.INTEGER, primaryKey:true},
name: Sequelize.STRING,
}, {
tableName: "student",
timestamps: false
});
this.Course = this.sequelize.define('course', {
no: {type:Sequelize.INTEGER,primaryKey:true},
name: Sequelize.STRING,
},{
tableName: 'course',
timestamps: false
});
this.Score = this.sequelize.define('score',{
score: Sequelize.INTEGER,
test_value: {
type: Sequelize.INTEGER,
set: function(v) {
console.log("set called");
self.callCount++;
this.setDataValue('test_value', v+1);
}
}
}, {
tableName: 'score',
timestamps: false
});
this.Student.hasMany(this.Course, {through: this.Score, foreignKey: 'StudentId'});
this.Course.hasMany(this.Student, {through: this.Score, foreignKey: 'CourseId'});
return this.sequelize.sync({force:true}).then(function () {
return Promise.join(
self.Student.create({no:1, name:'ryan'}),
self.Course.create({no:100, name:'history'})
).spread(function(student, course){
return student.addCourse(course, {score: 98, test_value: 1000});
}).then(function(){
expect(self.callCount).to.equal(1);
return self.Score.find({StudentId: 1, CourseId: 100}).then(function(score){
expect(score.test_value).to.equal(1001);
});
})
.then(function(){
return Promise.join(
self.Student.build({no: 1}).getCourses({where: {no: 100}}),
self.Score.find({StudentId: 1, CourseId:100})
);
})
.spread(function(courses, score) {
expect(score.test_value).to.equal(1001);
expect(courses[0].score.toJSON().test_value).to.equal(1001);
expect(self.callCount).to.equal(1);
});
});
});
});
}); });
}); });
\ No newline at end of file
Markdown is supported
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!