Typescript 断言修饰符抛出

Typescript 断言修饰符抛出,typescript,mocha.js,decorator,sinon,chai,Typescript,Mocha.js,Decorator,Sinon,Chai,我已经创建了一个decorator,它包含一个规则,当它与一个类一起使用多次时将抛出,它的一个真正基本的版本如下所示: function someDecorator(target: any) { var msg = "Decorator can only be applyed once"; if(target.annotated != undefined) throw new Error(msg); target.annotated = true; } 因此,如果开发人

我已经创建了一个decorator,它包含一个规则,当它与一个类一起使用多次时将抛出,它的一个真正基本的版本如下所示:

function someDecorator(target: any) {
    var msg = "Decorator can only be applyed once";
    if(target.annotated != undefined) throw new Error(msg);
    target.annotated = true;
}
因此,如果开发人员尝试多次使用该开发人员,它将抛出:

@someDecorator
@someDecorator // throws
class Test {

}
我想写一个单元测试来验证这个功能。我用的是摩卡、柴和西农

我怎么能断言某个装饰师抛出了什么

我怎么能断言某个装饰师抛出了什么


您基本上需要调用它两次(
someDecorator(someDecorator(function(){})
)和另一种可能的方法:

declare function __decorate(decorators, target, key?, desc?);
declare function __param(paramIndex, decorator);

describe("@named decorator \n", () => {
  it("It should throw when applayed mutiple times \n", () => {

    var useDecoratorMoreThanOnce = function() {
      __decorate([
          __param(0, named("a")),
          __param(0, named("b"))
      ], NamedTooManyTimesWarrior);
    };

    var msg = "Metadadata key named was used more than once in a parameter.";
    expect(useDecoratorMoreThanOnce).to.throw(msg);
  });
});