2015-08-27 240 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