【发布时间】:2015-01-02 23:18:16
【问题描述】:
我刚刚开始使用 Jasmine 和 Karma 为我的 Angular 应用程序创建单元测试。当我认为它不应该失败时,我有一个测试失败了。我想从控制器本身获取控制台输出,而不仅仅是在控制器上运行的茉莉花测试,这可能吗?
这是一个代码示例: 测试:
it('First test', function() {
var ctrl = controller('controller', {$scope: scope, MyHttpService: MyHttpMock});
scope.update();
console.log("I can see this console output");
expect(scope.campaignID).toEqual('');
expect(scope.data.pending).toEqual(20); // <--- fails here
});
控制器:
$scope.update = function() {
MyHttpService.get('stats').then(function(data) {
console.log("the data: ", data); // <-- can't see this output
$scope.data = data;
});
}
--编辑--
这是 MyHttpMock 的代码:
var MyHttpMock = {
get: function(key) {
var deferred = $q.defer(),
promise = deferred.promise;
promise.then(function(data) {
return data;
});
if (key == "stats") {
deferred.resolve({"pending": 20})
} else {
deferred.resolve({});
}
return promise;
}
};
我最初没有包含它,因为我的问题是关于如何从控制器中查看调试输出,而不是调试这个特定问题。但无论如何它都在这里,以防万一。
--结束编辑--
我可以从测试的控制台日志中看到返回值看起来是正确的。模拟服务似乎正在做它应该做的事情。但是测试失败了,它显示 scope.pending 为未定义。 MyHttpService 返回一个承诺,我怀疑它的结构不正确,或者类似的东西。但是,我不确定如何检查它。
有没有办法从控制器中查看控制台日志以查看实际传入的数据?
【问题讨论】:
-
MyHttpMock中有什么内容?
标签: javascript angularjs unit-testing jasmine karma-runner