This is an annoying file to test given the poor design of executing code when loading that file.
Here's my version of the test using mocksHelper and sinon.
```javascript
'use strict';

mocha.setup({ globals: ['kFontStep', 'minFontSize',
  'kMasterVolume', 'kShortPressDuration', 'gTonesFrequencies',
  'keypadSoundIsEnabled', 'TonePlayer', 'KeypadManager'] });
/* globals MockMozL10n */

require('/test/unit/mock_l10n.js');
require('/test/unit/mock_settings_listener.js');

var mocksHelperForKeypad = new MocksHelper([
  'SettingsListener'
]).init();

suite('Emergency Keypad', function() {
  var realMozL10n;

  mocksHelperForKeypad.attachTestHelpers();

  suiteSetup(function() {
    realMozL10n = navigator.mozL10n;
    navigator.mozL10n = MockMozL10n;

    document.body.classList.add('hidden');
  });

  suiteTeardown(function() {
    navigator.mozL10n = realMozL10n;
  });

  test('> waits for l10n before becoming visible', function(done) {
    this.sinon.spy(navigator.mozL10n, 'once');
    require('/js/keypad.js', function() {
      assert.isTrue(document.body.classList.contains('hidden'));
      navigator.mozL10n.once.yield();
      assert.isFalse(document.body.classList.contains('hidden'));
      done();
    });
  });
});
```
By using sinon, the l10n mock can just expose the API signature without duplicating part of the logic. But I'll let you design the shared l10n mock to your needs. We should use mocksHelper though. Let me know what you think.