LINUX.ORG.RU

История изменений

Исправление 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);
В целом, интересная штука, но полностью пока не проникся. Надо будет попробовать на чём-то покрупнее.