习惯性地测试when.js与Jasmine的承诺

时间:2015-09-07 05:17:28

标签: jasmine promise when-js

我正在为返回<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p" xmlns:context="http://www.springframework.org/schema/context" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.0.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.0.xsd"> <context:component-scan base-package="kr.ac.jbnu.sql.soremore" /> <bean id="viewResolver" class="org.springframework.web.servlet.view.UrlBasedViewResolver"> <property name="viewClass" value="org.springframework.web.servlet.view.JstlView" /> <property name="prefix" value="/WEB-INF/jsp/" /> <property name="suffix" value=".jsp" /> <property name="contentType" value="text/html; charset=UTF-8" /> </bean> <!-- for file upload --> <bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver"> <!-- setting maximum upload size --> <property name="maxUploadSize" value="20000000" /> </bean> </beans> 承诺的代码编写一些Jasmine单元测试。我一直在发现自己编写这样的代码:

when.js

捕获异常的唯一方法是使用doMyThing().then(function(x) { expect(x).toEqual(42); done(); }).otherwise(function() { expect(true).toBe(false); done(); }); 函数(它是{{3}}的旧版本),然后似乎没有Jasmine(2.0)函数说“检测到失败“ - 因此kludgy”otherwise()“。

有没有更惯用的方法呢?

2 个答案:

答案 0 :(得分:2)

您应该考虑使用像Mocha这样的promises支持的测试库,或者使用像jasmine-as-promised这样的帮助器来为您提供这种语法。这可以让你做一些事情:

// notice the return, and _not_ passing `done` as an argument to `it`:
return doMyThing().then(function(x) {
  expect(x).toEqual(42);
});

基本上,返回值被检查为一个承诺,如果它是测试框架,则检查承诺是否被拒绝并将其视为失败。

答案 1 :(得分:0)

在仔细查看文档并意识到我们正在使用Jasmine 2.3之后,我发现我们可以使用fail()函数来大大简化事情。问题中的例子变为:

doMyThing().then(function(x) {
  expect(x).toEqual(42);
}).otherwise(fail).then(done);

如果doMyThing()抛出异常,则该错误将传递给fail(),后者会打印堆栈跟踪。

.otherwise(fail).then(done);原来是一个非常方便的习语。