I believe the error is being thrown on this line:
$scope.appointment = new Appointment();
Appointment is an object literal, and not a function, so essentially you're trying to do this:
var x = {create: function(){}};
var y = new x();
But what you seem to want to do is this:
var x = function(){return {create: function(){}}};
var y = new x();
So make your mock like this:
Appointment: function() {
return jasmine.createSpyObj("Appointment", ["create"])
}