首先,我几个月前才见过Angular和Jasmine。所以我花了两三个月的时间在公司的实践中研究这个,最后他们让我尝试在Visual Studio Code中测试一个控制器/服务。
我在控制器中有这个变量:
<dependency>
<groupId>org.apache.axis</groupId>
<artifactId>axis-jaxrpc</artifactId>
<version>1.4</version>
</dependency>
<dependency>
<groupId>org.apache.axis</groupId>
<artifactId>axis-saaj</artifactId>
<version>1.4</version>
</dependency>
<dependency>
<groupId>axis</groupId>
<artifactId>axis-wsdl4j</artifactId>
<version>1.5.1</version>
</dependency>
<dependency>
<groupId>axis</groupId>
<artifactId>axis</artifactId>
<version>1.4</version>
</dependency>
在spec.js中,我创建了一个vm.option = $state.param.option;
:
it
以前,我在it('"option" should be defined', function () {
expect(ctrl.option).toBeDefined();
});
beforeEach
,$controller
,$rootScope
,_$log_
和服务中注入了$injector
。我需要一些特殊的东西来测试这个变量吗我尝试了注入_$state_
,但也显示了消息Expected undefined to be defined
。
我感谢所有的帮助,对不起我的英语不好。
编辑:
spec.js:
'use strict';
describe('app/specs/spec.js', function () {
var scope, $log, service, ctrl, state/*, testedStateExample*/;
beforeAll(function () {} );
beforeEach(angular.mock.module('App.moduleExample'));
beforeEach(function () {
module(function ($provide){
$provide.constnt('APP_CONFIG', {});
});
});
beforeEach(angular.mock.inject(function ($controller, $state, $rootScope, _$log_, _service_){
service = _service_;
scope = $rootScope.$new();
$log = _$log_;
$state = $state;
state = { params: { option: 'E' }}
ctrl = $controller('controllerExample', {
$scope: scope,
service: service,
$log: $log
});
//testedStateExample = new ctrl(state);
});
it('"option" should be defined', function () {
expect(state.params).toBeDefined();
});
});
答案 0 :(得分:0)
您的控制器中存在拼写错误:-Wformat
没有$state
属性,但param
。
此外,您还必须在测试中对注入的params
对象定义params.option
,因为在注入的$state
中它没有设置,因此您的控制器无法从中读取它$state
- 但如何执行此操作取决于您的代码详细信息。 $state
是根据URL和路由配置设置的,但是当您测试独立控制器时,没有URL也没有路由配置,因此state.params
为空。
解决问题的最佳方法是模拟注入$state.params
:
让我们说你有以下控制器:
$state
在您的测试规范中,您可以模拟function MyController($state) {
this.option = $state.params.option
...
}
服务并将此模拟作为参数传递给您的控制器:
$state
您已忘记将var mockState = {
params: {
option: 'TEST'
}
}
var testedControllerInstance = new MyController(mockState)
}
...
expect(testedControllerInstance.option).toBe('TEST');
注入您的控制器:
state