История изменений
Исправление neversleep, (текущая версия) :
Тестируете вы примерно так? (не стал typescript тащить)
import Sinon from 'sinon';
import { Container } from 'inversify';
import { assert } from 'chai';
import Symbols from '../src/ioc/symbols';
import appContainer from '../src/ioc/container';
describe('Warrior', () => {
  describe('attack', () => {
    let container;
    let fakeSword = {
      hit: Sinon.stub(),
    };
    before(() => {
      // FIXME: Чтобы не портить основной контейнер делаем merge?
      container = Container.merge(appContainer, new Container());
      container.rebind(Symbols.Sword).toConstantValue(fakeSword);
    });
    it('does incredible damage', () => {
      const warrior = container.get(Symbols.Warrior);
      warrior.attack();
      assert(fakeSword.hit.calledOnce);
    });
  });
});
import * as inversify from "inversify";
import Symbols from './ioc/symbols';
require('reflect-metadata');
export default class Warrior {
  constructor(weapon) {
    this.weapon = weapon;
  }
  attack() {
    this.weapon.hit();
  }
}
inversify.decorate(inversify.injectable(), Warrior);
inversify.decorate(inversify.inject(Symbols.Sword), Warrior, 0);
Исходная версия neversleep, :
Тестируете вы примерно так? (не стал typescript тащить)
import Sinon from 'sinon';
import { Container } from 'inversify';
import { assert } from 'chai';
import Symbols from '../src/ioc/symbols';
import appContainer from '../src/ioc/container';
describe('Warrior', () => {
  describe('hit', () => {
    let container;
    let fakeSword = {
      hit: Sinon.stub(),
    };
    before(() => {
      // FIXME: Чтобы не портить основной контейнер делаем merge?
      container = Container.merge(appContainer, new Container());
      container.rebind(Symbols.Sword).toConstantValue(fakeSword);
    });
    it('does incredible damage', () => {
      const warrior = container.get(Symbols.Warrior);
      warrior.attack();
      assert(fakeSword.hit.calledOnce);
    });
  });
});
import * as inversify from "inversify";
import Symbols from './ioc/symbols';
require('reflect-metadata');
export default class Warrior {
  constructor(weapon) {
    this.weapon = weapon;
  }
  attack() {
    this.weapon.hit();
  }
}
inversify.decorate(inversify.injectable(), Warrior);
inversify.decorate(inversify.inject(Symbols.Sword), Warrior, 0);