2015-08-27 152 views
34

如果我的测试代码中永远不应该达到(例如承诺序列的fail子句),我该如何强制 - 测试失败?强制失败茉莉花测试

我使用类似expect(true).toBe(false);的东西,但这不太好。

另一种方法是等待测试超时,这是我想避免的(因为它很慢)。

回答

42

茉莉花提供了一个全球性的方法fail(),它可以规范块it()内使用,并允许使用自定义错误消息:

it('should finish successfully', function (done) { 
    MyService.getNumber() 
    .success(function (number) { 
    expect(number).toBe(2); 
    done(); 
    }) 
    .fail(function (err) { 
    fail('Unwanted code branch'); 
    }); 
}); 

这是内置了茉莉花的功能,它无处不在正常工作中比较我在下面提到的'错误'方法。

更新之前:

您可以从代码分支抛出一个错误,它会立即失败,一个规范,你就能够提供自定义错误消息:

it('should finish successfully', function (done) { 
    MyService.getNumber() 
    .success(function (number) { 
    expect(number).toBe(2); 
    done(); 
    }) 
    .fail(function (err) { 
    throw new Error('Unwanted code branch'); 
    }); 
}); 

但你应该小心,如果你想从Promise成功处理程序then()中抛出一个错误,因为错误将会被吞噬并永远不会出现。此外,您应该了解应用程序中可能的错误处理程序,这可能会在您的应用程序中发现此错误,因此无法通过测试。

+7

还有'done.fail('message')'。 – TrueWill

+1

对于那些停留在较旧版本的Jasmine中的人,'失败'方法在1.3中不可用,但可以通过'throw new Error(message)'有效地填充。效果可以取决于你的测试运行者 - 也可以考虑像'expect('[失败的原因]')toBeNull()'。 – ryanwebjackson