데이터가 배열에 입력되었는지 확인하기 위해 재스민 테스트를 작성하려고합니다. 뷰 모델, 유닛 (재스민) 테스트 파일 및 유닛 테스트를위한 정보를 설정하는 스테이지 파일이 있습니다. 내가 얻는 오류는 배열이 정의되지 않았다는 것입니다. 오류 메시지에 "{SiteId : 0, FirstName : 'Jon', LastName : 'Walker', ObjectState : 1}이 될 것으로 예상되지 않았습니다."배열에 대한 재스민 테스트가 계속 실패합니다
이것은 내 viewModel입니다. 이것은 자스민 시험에 대한 정보를 초기화하는 내 단계 파일이
var EF = (function() {
return {
ObjectState: {
Unchanged: 0,
Added: 1,
Modified: 2,
Deleted: 3
}
};
})();
var patientMapping = {
'Patients': {
key: function (patient) {
return ko.utils.unwrapObservable(patient.PatientId);
},
create: function (options) {
return new PatientViewModel(options.data);
}
}
};
PatientViewModel = function (data) {
var self = this;
ko.mapping.fromJS(data, {}, self);
self.flagPatientAsEdited = function() {
if (self.ObjectState() != ObjectState.Added) {
self.ObjectState(ObjectState.Modified);
}
return true;
},
self.FullName = ko.computed(function() {
return (self.FirstName() + " " + self.LastName());
});
}
SiteViewModel = function (data) {
var self = this;
ko.mapping.fromJS(data, patientMapping, self);
self.save = function() {
$.ajax({
url: "/Site/Save/",
type: "POST",
data: ko.toJSON(self),
contentType: "application/json",
success: function (data) {
if (data.siteViewModel != null) {
alert("Changes were saved successfully.");
ko.mapping.fromJS(data.siteViewModel, {}, self);
}
if (data.newLocation != null) {
window.location = data.newLocation;
}
}
});
},
self.flagSiteAsEdited = function() {
if (self.ObjectState() != ObjectState.Added) {
self.ObjectState(ObjectState.Modified);
}
return true;
},
self.addPatient = function() {
var patient = new PatientViewModel({ SiteId: 0, FirstName: "", LastName: "", ObjectState: ObjectState.Added });
self.Patients.push(patient);
},
self.deletePatient = function (patient) {
self.Patients.remove(this);
if (patient.PatientId() > 0 && self.PatientsToDelete.indexOf(patient.PatientId()) == -1) {
self.PatientsToDelete.push(patient.PatientId());
}
};
}
이다 : 나는 self.addPatient을 테스트하기 위해 노력하고
/// <reference path="../../lib/jasmine.js"/>
/// <reference path="../../lib/mock-ajax.js" />
/// <reference path="../../jquery-2.1.3.min.js" />
/// <reference path="../../lib/jasmin-jquery.js" />
/// <reference path="../../bootstrap.js" />
/// <reference path="../../knockout-3.2.0.js" />
/// <reference path="../../knockout.mapping-latest.js" />
/// <reference path="SiteViewModelStage.js" />
/// <reference path="../../siteviewmodel.js" />
describe("Add patient check:", function() {
beforeEach(function() {
OBP.Testing.reset()
});
var Patients = new Array();
var viewModel = new SiteViewModel({ patient: window.patient });
it("Add patient works", function() {
expect(Patients[0]).toBe(patient);
});
});
:
//staged data for view model testing
var OBP = OBP || {};
OBP.Testing = (function() {
var reset = function() {
var isReadOnly = true;
window.isReadOnly = true;
window.ObjectState = 2;
window.FirstName = "Joe";
window.LastName = "Mitchell";
window.SiteId = 5;
window.patient = { "SiteId": 0, "FirstName": "Jon", "LastName": "Walker", "ObjectState": 1 };
window.patientDelete = { "PatientId": 1, "SiteId": 0, "FirstName": "Frank", "LastName": "Smith", "ObjectState": 1 };
};
return {
reset: reset
};
})();
OBP.Testing.reset();
이것은 실패 내 자스민 시험 자체가
내 재스민 테스트 디버깅에 도움을 주시면 큰 도움이 될 것입니다. 뷰 모델에서
self.Patients = ko.observableArray();
편집 addPatient :
'Patients'는'describe()'에 정의 된 길이가 0 인 배열이다. 함수에 전달되지 않으므로 수정되지 않습니다. '환자 [0]'은 정의되지 않습니다. – xverges
그게 정의되지 않은 부분이 어디서 오는지 알지만,'self.addPatient'는'self.Patients.push (patient);'를 가지고 있습니다. 그래서 정의되지 않은 이유는 모르겠습니다. – AtlasBowler
'addPatient'가 사용하는 변수 인'SiteViewModel .Patients'와는 관계가없는 테스트에 의해 검사 된 지역 변수'var Patients = new Array();'가 있습니다. 반면에, 당신은'Patients'를 배열로 초기화하지 않고,'push '를 호출하면 작동하지 않습니다. – xverges