mirror of
https://github.com/FoggedLens/iD.git
synced 2026-02-13 01:02:58 +00:00
This also includes a bunch of tweaks to make the tests work in both PhantomJS and modern browsers like Chrome. Basically - introduce some more async into the test code so that the coreData.get promise is guaranteed to settle. Because in PhantomJS the promise is polyfilled, and Chrome it's native, they work slightly differently.
76 lines
2.6 KiB
JavaScript
76 lines
2.6 KiB
JavaScript
describe('iD.coreData', function() {
|
|
var _context;
|
|
|
|
before(function() {
|
|
iD.data.test = { hello: 'world' };
|
|
});
|
|
|
|
after(function() {
|
|
delete iD.data.test;
|
|
});
|
|
|
|
beforeEach(function() {
|
|
_context = iD.coreContext();
|
|
});
|
|
|
|
|
|
describe('#fileMap', function() {
|
|
it('gets the fileMap', function() {
|
|
var data = iD.coreData(_context);
|
|
expect(data.fileMap()).to.be.a('object');
|
|
});
|
|
it('sets the fileMap', function() {
|
|
var data = iD.coreData(_context);
|
|
var files = { 'intro_graph': 'data/intro_graph.min.json' };
|
|
expect(data.fileMap(files)).to.be.ok;
|
|
});
|
|
});
|
|
|
|
describe('#get', function() {
|
|
it('returns a promise resolved if we already have the data', function(done) {
|
|
var data = iD.coreData(_context);
|
|
var prom = data.get('test');
|
|
// expect(prom).to.be.a('promise'); // these are polyfilled in phantomjs
|
|
prom
|
|
.then(function(data) {
|
|
expect(data).to.be.a('object');
|
|
expect(data.hello).to.eql('world');
|
|
})
|
|
.finally(done);
|
|
|
|
window.setTimeout(function() {}, 20); // async - to let the promise settle in phantomjs
|
|
});
|
|
|
|
it('returns a promise rejected if we can not get the data', function(done) {
|
|
var data = iD.coreData(_context);
|
|
var prom = data.get('wat');
|
|
prom
|
|
.then(function(data) {
|
|
throw new Error('We were not supposed to get data but did: ' + data);
|
|
})
|
|
.catch(function(err) {
|
|
expect(/^Unknown data file/.test(err)).to.be.true;
|
|
})
|
|
.finally(done);
|
|
|
|
window.setTimeout(function() {}, 20); // async - to let the promise settle in phantomjs
|
|
});
|
|
|
|
it('returns a promise to fetch data if we do not already have the data', function(done) {
|
|
var files = { 'intro_graph': 'data/intro_graph.min.json' };
|
|
var data = iD.coreData(_context).fileMap(files);
|
|
var prom = data.get('intro_graph');
|
|
// expect(prom).to.be.a('promise'); // these are polyfilled in phantomjs
|
|
prom
|
|
.then(function(data) {
|
|
expect(data).to.be.a('object');
|
|
expect(data.n1.tags.name).to.eql('Three Rivers City Hall');
|
|
})
|
|
.finally(done);
|
|
|
|
window.setTimeout(function() {}, 20); // async - to let the promise settle in phantomjs
|
|
});
|
|
});
|
|
|
|
});
|