История изменений
Исправление 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);