Javascript FakeServer在使用Jasmine和Sinon运行测试时不返回假数据
我试图测试koviewmodel中的一些可观察数组是在ajax请求之后设置的。我用的是茉莉花和西农。我的问题是,在执行预期测试时,我的land observablearray是空的。在设置sinon fakeserver并返回时,我错过了什么 顺便说一句,这在运行live时效果很好 My ko模型和viewmodel:Javascript FakeServer在使用Jasmine和Sinon运行测试时不返回假数据,javascript,testing,jasmine,sinon,Javascript,Testing,Jasmine,Sinon,我试图测试koviewmodel中的一些可观察数组是在ajax请求之后设置的。我用的是茉莉花和西农。我的问题是,在执行预期测试时,我的land observablearray是空的。在设置sinon fakeserver并返回时,我错过了什么 顺便说一句,这在运行live时效果很好 My ko模型和viewmodel: var MB = MB || {}; $(function() { MB.KontaktModel = function(model) { "use s
var MB = MB || {};
$(function() {
MB.KontaktModel = function(model) {
"use strict";
var self = this;
self.id = ko.observable(model.Id);
self.land = ko.observableArray([]);
self.kategori = ko.observableArray([]);
};
MB.KontaktViewModel = function() {
"use strict";
var numberCrusher = new MB.NumberCrusher(),
kontakt = ko.observable(),
land = ko.observableArray([]),
kategori = ko.observableArray([]),
loadKontakt = function(model) {
var newModel = new MB.KontaktModel(model);
.......some other setting happens here
MB.CrmService.GetLand(function (data) {
ko.mapping.fromJS($.parseJSON(data), {}, land);
kontakt().land(land());
MB.UiFixUp.RefreshChosenAfterDataUpdate();
if (!idIsEmpty) {
MB.ChosenAction.SeDefaultValue("chosen-landId", model.LandId);
}
});
MB.CrmService.GetKategori(function (data) {
ko.mapping.fromJS($.parseJSON(data), {}, kategori);
newModel.kategori(kategori);
kontakt().kategori(kategori());
MB.UiFixUp.RefreshChosenAfterDataUpdate();
if (!idIsEmpty) {
MB.ChosenAction.SeDefaultValue("chosen-kontaktKategori", model.KategoriId);
}
});
kontakt(newModel);
};
return {
kontakt: kontakt,
loadKontakt: loadKontakt
};
}();
});
CRM服务:
MB.CrmService = function() {
"use strict";
var serviceBaseCrm = '/crm/kontakt/',
getKategori = function(callback) {
getSimpleJson("kategori", serviceBaseCrm, callback);
},
getLand = function(callback) {
getSimpleJson("land", serviceBaseCrm, callback);
};
return {
GetKategori: getKategori,
GetLand: getLand
};
}()
这是我的测试:
describe("mb.kontaktViewModel.js", function () {
var server,
kontaktViewModel,
testData = {
land: ['{"Kode": "null", "Id": "e7ae76c0-3598-e311-8270-24fd526b95fb", "Navn": "Chile" },{"Kode": "null", "Id":"d4ae76c0-3598-e311-8270-24fd526b95fb", "Navn":"Mongolia"}'],
kategori: ['{"Id":"297f66b2-2898-e311-8270-24fd526b95fb", "Navn": "Kunde"},{"Id":"2a7f66b2-2898-e311-8270-24fd526b95fb", "Navn":"Leverandør"}'],
dummyModel: { Navn: "En kontakt", Nummber: 10005, OrgNr: null, Id : 10001 }
};
beforeEach(function() {
server = sinon.fakeServer.create();
kontaktViewModel = MB.KontaktViewModel;
});
afterEach(function() {
server.restore();
});
describe("when viewmodel's loadKontakt is called", function () {
it("should populate land with data from server", function () {
server.respondWith("GET", "/crm/kontakt/land", [200, { "Content-Type": "application/json" }, JSON.stringify(testData.land)]);
server.respondWith("GET", "/crm/kontakt/kategori", [200, { "Content-Type": "application/json" }, JSON.stringify(testData.kategori)]);
kontaktViewModel.loadKontakt(testData.dummyModel);
server.respond();
expect(kontaktViewModel.kontakt().land()).toBe(JSON.stringify(testData.land));
});
});
})) 确保实际发送的URL准确无误:
/crm/kontakt/land
/crm/kontakt/kategori
您可以在Devtools中查看浏览器控制台(例如:在Chrome中),看看是否正确捕获了它。如果URL中有其他字符串,则始终可以与RegEx匹配。例如,如果要检查URL是否以指定的字符串开头,可以使用:
server.respondWith("GET", /^\/crm\/kontakt\/kategori/, [200, { "Content-Type": "application/json" }, JSON.stringify(testData.kategori)]);
否则,在相同的devtool中继续并放置断点,然后查看返回的JSON。
最后,我通常喜欢在每次测试之前在我的上将服务器设置为server.autoRespond=true
,这样您就不必在每次测试中使用server.respond