我正在尝试测试我的angularjs代码。
我的控制器是大胆的。
'use strict';
(function() {
angular.module('myApp')
.controller('TestController', function($scope, $http, Auth, myService, $state) {
try{
$scope.testVar = "Hello";
}catch(e){
console.log(e);
}
});
});
我的测试代码如下:
'use strict';
describe('Controller: TestController', function () {
beforeEach(module('myApp'));
var TestController, scope;
beforeEach(inject(function ($controller, $rootScope) {
scope = $rootScope.$new();
TestController = $controller('TestController', {
$scope: scope
});
}));
it('should testVar to be defined', function () {
expect(scope).toBeDefined();
expect(scope.testVar).toBeDefined();
});
});
当我运行它时,测试失败为Expected undefined to be defined.
我不知道我做错了什么?
我已经在SO上查了很多帖子,但还没有得到解决。
答案 0 :(得分:0)
可能问题与您的变量声明有关。您已经声明了ManualBookingController,但是您将$ Control行使用TestController。将ManualBookingController更改为TestController,看看是否有效。
答案 1 :(得分:0)
我几乎按原样使用了你的代码,把它放在fiddle中,测试通过就好了。在您的情况下,我认为可能缺少的是您的控制器中存在一些依赖项,但在测试套件中使用$controller
创建模拟控制器时不会进行模拟。我从原来的控制器中删除了它们(现在)并且工作正常。
为了模仿$state
(提供商)和其他服务,您可以看到此same example fiddle passing with dependencies injected并阅读underscore wrapping。
另外,请注意,在您的问题上分享确切的详细信息非常重要。当我使用您的确切代码运行您的测试套件时,它首先给了我以下错误:
Error: [$injector:unpr] Unknown provider: $stateProvider <- $state
http://errors.angularjs.org/1.2.9/ $ injector / unpr?p0 =%24stateProvider%20%3C-%20%24state
..在你的问题中根本没有提到。您只提到了下一个错误Expected undefined to be defined
,这个错误非常常见,并且无法想象发生了什么。