Manual Reference Source Test

tests/customloader.spec.js

import Beloader from 'beloader';

describe('Custom loader callback', function () {

  it('should run a custom loader callback that resolve', function () {
    var loader = new Beloader();
    var l = function () {
      return new Promise((resolve, reject) => {
        resolve();
      });
    };

    return loader.fetch('custom', {loader: l})
      .promise.then(item => item.state.ready.should.be.true);
  });

  it('should run a custom loader callback that reject', function () {
    var loader = new Beloader({autoprocess: false});
    var l = function () {
      return new Promise((resolve, reject) => {
        reject();
      });
    };

    var item = loader.fetch('custom', {loader: l});

    return item.process().promise['catch'](item => {
      item.state.error.should.be.true;
    });
  });

  it('should throw an exception if loader not a Function', function () {
    var loader = new Beloader({autoprocess: false});
    var l = 'wrong';

    var item = loader.fetch('custom', {loader: l});

    return item.process().promise['catch'](item => {
      item.should.be.instanceof(TypeError);
    });
  });

  it('should override sync loader', function () {
    var spy = sinon.spy();
    var sync = function () {
      return new Promise((resolve, reject) => {
        spy();
        resolve();
      });
    };
    var loader = new Beloader({
      loader: {
        sync: sync
      }
    });

    return loader.fetch('script', {
      url: 'https://cdn.jsdelivr.net/npm/elementify@latest',
      async: false
    }).promise.then(item => {
      spy.called.should.be.true;
    });
  });

  it('should override async loader', function () {
    var spy = sinon.spy();
    var async = function () {
      return new Promise((resolve, reject) => {
        spy();
        resolve();
      });
    };
    var loader = new Beloader({
      loader: {
        async: async
      }
    });

    return loader.fetch('script', 'https://cdn.jsdelivr.net/npm/elementify@latest')
      .promise.then(item => {
        spy.called.should.be.true;
      });
  });
});