我在尝试在Angularjs中测试基于承诺的代码时遇到了困难。
我的控制器中有以下代码:
$scope.markAsDone = function(taskId) {
tasksService.removeAndGetNext(taskId).then(function(nextTask) {
goTo(nextTask);
})
};
function goTo(nextTask) {
$location.path(...);
}
我想对以下情况进行单元测试:
markAsDone
被调用tasksService.removeAndGetNext
tasksService.removeAndGetNext
是做了应该改变的位置(调用goTo
)在我看来,没有简单的方法可以分别测试这两种情况。
我要做的第一个测试是:
var noopPromise= {then: function() {}}
spyOn(tasksService, 'removeAndGetNext').andReturn(noopPromise);
现在,要测试第二种情况,我需要创建另一个永远不变的虚假承诺resolved
。这一切都非常乏味,并且有很多样板代码。
还有其他测试方法吗?还是我的设计有异味?
您仍然需要模拟服务并返回承诺,但是您应该使用真实的承诺,因此您无需实现其功能。使用beforeEach
创建已被兑现承诺,并嘲笑服务,如果你需要它总是被解决。
var $rootScope;
beforeEach(inject(function(_$rootScope_, $q) {
$rootScope = _$rootScope_;
var deferred = $q.defer();
deferred.resolve('somevalue'); // always resolved, you can do it from your spec
// jasmine 2.0
spyOn(tasksService, 'removeAndGetNext').and.returnValue(deferred.promise);
// jasmine 1.3
//spyOn(tasksService, 'removeAndGetNext').andReturn(deferred.promise);
}));
如果您希望在每个it
块中使用不同的值来解析它,则只需将延期公开给局部变量并在规范中对其进行解析。
当然,您可以按原样保留测试,但是这里有一些非常简单的规范可以向您展示它如何工作。
it ('should test receive the fulfilled promise', function() {
var result;
tasksService.removeAndGetNext().then(function(returnFromPromise) {
result = returnFromPromise;
});
$rootScope.$apply(); // promises are resolved/dispatched only on next $digest cycle
expect(result).toBe('somevalue');
});
我正在尝试用C语言实现一个测试环境,它似乎比我预期的要困难得多。似乎我有3个选择: 1) 通过接口注入依赖关系。 2)通过模板注入依赖关系 这里可以找到这些选项的一个很好的讨论:C中依赖注入的接口与模板 3) 为每个需要模拟/存根的测试生成不同的可执行文件。 选项1和2需要对源代码进行大量修改,我并不十分喜欢这些修改。我不应该为了测试而牺牲性能/清晰度。另一方面,为每个测试制定不同的项目似乎也不是
英文原文:http://emberjs.com/guides/testing/unit-testing-basics/ 尽管Ember.Object是Ember中得基础对象类型,然后能够测试一个简单的Ember.Object是能测试Ember应用各个特定部分的基础。如控制器、组件等。测试Ember.Object就如创建一个对象实例一样简单,设置其状态并针对对象进行断言。作为实例,下面将来介绍一些一
问题内容: 我有一种方法,根据从当前日期开始,该方法对从数据库中获取的数据实施不同的逻辑。 我想通过单元测试创建对象来测试它,将它们保存在数据库中并调用被测试的方法。但是,为了获得可预测的结果,我每次都需要更改系统日期,而且我不知道如何在Java中执行此操作。 有什么建议吗? 问题答案: 您可以使用当前日期生成预期结果。 或者您编写系统以使用您在测试时提供的日期/时间(而不是时钟),这样,时间
首先所有的包都应该有一定的必要文档,然后同样重要的是对包的测试。 在第 3 章中提到了 Go 的测试工具 gotest, 我们已经在 9.8 节中使用过了。这里我们会用更多的例子进行详细说明。 名为 testing 的包被专门用来进行自动化测试,日志和错误报告。并且还包含一些基准测试函数的功能。 备注:gotest 是 Unix bash 脚本,所以在 Windows 下你需要配置 MINGW 环
本文向大家介绍对Angular.js Controller如何进行单元测试,包括了对Angular.js Controller如何进行单元测试的使用技巧和注意事项,需要的朋友参考一下 一、写个简单的Angular App 在开始写测试之前,我们先写一个简单的计算App,它会计算两个数字之和。 代码如下: 二、简单说说里面涉及的一些基本概念: 创建一个 module 什么是angular.modul
问题内容: 在Angular中,所有内容似乎都具有陡峭的学习曲线,并且对Angular应用程序进行单元测试绝对不能逃脱这种范例。 当我开始使用TDD和Angular时,我觉得我花了两倍(可能更多)的时间来弄清楚如何测试,甚至花更多的时间来正确地设置测试。但是正如Ben Nadel 在他的博客中所说的那样,角度学习过程存在起伏。他的图表绝对是我在Angular的经历。 但是,随着我在学习Angula