Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/478.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 角度Jasmine:从控制器查看控制台输出?_Javascript_Angularjs_Unit Testing_Jasmine_Karma Runner - Fatal编程技术网

Javascript 角度Jasmine:从控制器查看控制台输出?

Javascript 角度Jasmine:从控制器查看控制台输出?,javascript,angularjs,unit-testing,jasmine,karma-runner,Javascript,Angularjs,Unit Testing,Jasmine,Karma Runner,我刚刚开始使用Jasmine和Karma为我的angular应用程序创建单元测试。我有一次考试不及格,但我认为不应该。我想从控制器本身获得控制台输出,而不仅仅是在控制器上运行的jasmine测试,这可能吗 下面是一个代码示例: 测试: it('First test', function() { var ctrl = controller('controller', {$scope: scope, MyHttpService: MyHttpMock}); scope.update(

我刚刚开始使用Jasmine和Karma为我的angular应用程序创建单元测试。我有一次考试不及格,但我认为不应该。我想从控制器本身获得控制台输出,而不仅仅是在控制器上运行的jasmine测试,这可能吗

下面是一个代码示例: 测试:

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.pending显示为未定义
MyHttpService
返回一个承诺,我怀疑它的结构不正确,或者类似的东西。然而,我不知道如何检查它


有没有办法从控制器内查看控制台日志以查看实际传入的数据?

假设您的模拟返回承诺,类似于下面的承诺:-

var MyHttpMock = jasmine.createSpyObj('MyHttpMock', ['get']);
MyHttpMock.get.and.returnValue($q.when({pending:20}));
在设置期望之前和进行特定调用之后的测试中,您需要手动执行摘要循环来解决承诺

it('First test', function() {
    var ctrl = controller('controller', {$scope: scope, MyHttpService: MyHttpMock});
    scope.update();
    scope.$apply(); //Trigger a digest
    ///...
    expect(scope.data.pending).toEqual(20); 
});

您的promise.then()是毫无意义的,因为它只是用相同的微不足道的返回值包装原始承诺。你应该去掉那条线。目前,.then()返回一个不同的、新的派生承诺,但您返回的是原始的非派生承诺。

MyHttpMock中的内容是什么?您指的是什么?
promiseFactory
update()
方法中的一个?行-promise.then(函数(数据){returndata;}谢谢你的提示。我对angular还是个新手。虽然我会接受另一个答案,因为它解决了我原来的问题,但我也删除了那一行。@Trevor说得很清楚,整个函数可以替换为
函数(key){return$q.when(key==“stats”?{“pending”:20}:{};}
。您使用的是一式三份的。
var MyHttpMock = jasmine.createSpyObj('MyHttpMock', ['get']);
MyHttpMock.get.and.returnValue($q.when({pending:20}));
it('First test', function() {
    var ctrl = controller('controller', {$scope: scope, MyHttpService: MyHttpMock});
    scope.update();
    scope.$apply(); //Trigger a digest
    ///...
    expect(scope.data.pending).toEqual(20); 
});