强制失败茉莉花测试 [英] Force-failing a Jasmine test

查看:134
本文介绍了强制失败茉莉花测试的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

如果我在永远不会达到的测试中有代码(例如,承诺序列的失败子句),我该如何强制失败测试?

If I have code in a test that should never be reached (for example the fail clause of a promise sequence), how can I force-fail the test?

我使用类似 expect(true).toBe(false); 但这不是很漂亮。

I use something like expect(true).toBe(false); but this is not pretty.

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

The alternative is waiting for the test to timeout, which I want to avoid (because it is slow).

推荐答案

Jasmine提供了一个全局方法 fail(),可以在spec块中使用 it()并且还允许使用自定义错误消息:

Jasmine provides a global method fail(), which can be used inside spec blocks it() and also allows to use custom error message:

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

这是内置的Jasmine功能,与错误方法相比,它在任何地方都能正常工作我在下面提到过。

This is built-in Jasmine functionality and it works fine everywhere in comparison with the 'error' method I've mentioned below.

更新前:

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

You can throw an error from that code branch, it will fail a spec immediately and you'll be able to provide custom error message:

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(),因为错误会在那里被吞噬,永远不会出现。此外,您应该知道应用程序中可能存在的错误处理程序,这可能会在您的应用程序中捕获此错误,因此无法通过测试。

But you should be careful, if you want to throw an error from Promise success handler then(), because the error will be swallowed in there and will never come up. Also you should be aware of the possible error handlers in your app, which might catch this error inside your app, so as a result it won't be able to fail a test.

这篇关于强制失败茉莉花测试的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆