У меня есть следующий код Javascript:
(function (MyApp) {
var MY_KEYS;
get('/api/mykeys.jsp')
.then(function (response) {
let parsed = JSON.parse(response).keys;
MY_KEYS = {};
MY_KEYS.production = parsed.find(function (key) { return key.environment === 'PROD'; }).kid;
MY_KEYS.sandbox = parsed.find(function (key) { return key.environment === 'SANDBOX'; }).kid;
})
.catch(function () {
// Error handling
});
// --------------------------------------
// Public Methods
// --------------------------------------
function method1 () {
// Derive values from MY_KEYS
}
function method2 () {
// Derive values from MY_KEYS
}
// --------------------------------------
// Private Methods
// --------------------------------------
function get (url) {
return new Promise(function (resolve, reject) {
var req = new XMLHttpRequest();
req.open('GET', url);
req.onload = function () {
if (req.status === 200) {
resolve(req.response);
} else {
reject(Error(req.statusText));
}
};
req.onerror = function () {
reject(Error('Network Error'));
};
req.send();
});
}
// --------------------
// API
// --------------------
window[MyApp] = {
method1: method1,
method2: method2
};
}(window));
У меня есть два открытых метода и частный метод get()
, который выполняет запрос GET. get()
вызывается при загрузке страницы, а значение MY_KEYS используется в обоих открытых методах.
Я хочу проверить, что значения, установленные в открытых методах, верны (что требует MY_KEYS, чтобы быть корректным).
Используя поддельный XHR API Sinon.JS, мой тест выглядит примерно так:
describe('MyApp: ', function () {
beforeEach(function() {
fakeServer = sinon.createFakeServer();
MyApp = {
method1: function () {},
method2: function () {}
};
});
afterEach(function() {
fakeServer.restore();
});
describe("method1(): ", function () {
beforeEach(function () {
var json = {
keys: [
{ environment: "PROD", kid: "prodkey" },
{ environment: "SANDBOX", kid: "sandboxkey" }
]
};
var keysResponse = [
200,
{ 'Content-type': 'application/json' },
JSON.stringify(json)
];
fakeServer.respondWith('GET', '/api/mykeys.jsp', keysResponse);
});
it("Function 'launchUI' should be defined", function () {
fakeServer.respond();
expect(fakeServer.requests.length).toBe(1);
});
});
});
Сбой теста с «Ожидать от 0 до 1», поскольку вызов никогда не выполняется. Есть идеи, где я иду не так?