2014-09-19 51 views
0

我在下面有一个奇怪的外观测试规范。如何测试茉莉花自定义匹配器由于匹配器中的异常而失败

expect(function(){ 
    expect(null).not.toEqualMoment(testContext.moment1); 
}).toThrow(); 

由于下面的检查在我的自定义匹配器中引发了一个异常,所以内部期望失败。

if(!moment.isMoment(actual)) { 
    throw new Error(_.string.sprintf('Actual: %s , is not a Moment object.', jasmine.pp(actual))); 
} 

我觉得异常有在这里,而不是抛出只是返回一个失败的结果,因为如果不是, 期待(空).not.toEqualMoment(空)将返回true。 (如果这对你有意义)。

那么, 如果我的自定义匹配器出现异常,我该如何测试?

回答

0

如果您想测试自定义匹配器,只需应用您的匹配器即可完成此操作。 对于大多数简单的自定义匹配器,您可以只执行expect(actual).toBeCustom(expected)。如果测试通过,匹配器就可以。 对于倒立的情况,只需添加.not

但是,通过这种方式,您并未测试匹配器的内部工作方式,例如匹配器失败时返回的消息,或者 - 您的情况 - 匹配器抛出异常。你试图通过嵌套expect调用来测试这个,这是不可能的。

因此,您需要将匹配器本身添加到您的测试中,并测试compare方法。

expect(toEqualMomentMatcher.compare({}, momentjs())).toThrow('Actual: Object({ }) is not a Moment object');

除了你的问题,我建议你让匹配失败,如果实际是没有一刻。当actual不是一个瞬间时,仅返回不同的消息。