问题描述
我用爸爸约翰棱角分明的风格指南我的控制器是这样的:
下面的样式:
函数的TestController(){ VAR VM =这一点; vm.model = {名字:controllerAs VM测试};
}
我的测试code如下:
描述(控制器:的TestController',函数(){ beforeEach(模块('对myApp')); VAR的TestController; beforeEach(注入(函数($控制器){
范围= {}; =的TestController $控制器('的TestController',{
}); })); 它('应该有vm.model定义和testController.vm.model等于controllerAs VM测试,函数(){
期待(testController.vm).toBeDefined();
期待(testController.vm.model).toBeDefined();
期待(testController.vm.model.name).toEqual(controllerAs VM测试);
});
});
结果:
测试失败:
结果消息:预计未定义被定义。
在栈
所以我的问题是,我们如何可以测试从这个vm.model和其他变量?我还没有找到合适的引导线的引导线:
的 VM
等于该实例本身通过 VM =这一点;
因此,所有的属性都直接挂物体。
函数foo(){
VAR VM =这一点; vm.name ='乔希';
}VAR myFoo =新的Foo();
myFoo.name; //乔希;
因此,所有你需要做的是改变你的期望,删除 VM
属性。
预期(的TestController).toBeDefined();
期待(testController.model).toBeDefined();
期待(testController.model.name).toEqual(controllerAs VM测试);
为了证明这一点,这里是你的确切的例子,以及相关的茉莉花测试。
函数的TestController(){\r
\r
VAR VM =这一点;\r
\r
vm.model = {\r
名称:controllerAs VM测试\r
};\r
}\r
\r
\r
angular.module('对myApp',[])\r
.controller('的TestController'的TestController);\r
\r
描述(控制器:的TestController',函数(){\r
\r
beforeEach(模块('对myApp'));\r
\r
VAR的TestController;\r
\r
beforeEach(注入(函数($控制器){\r
范围= {};\r
\r
的TestController = $控制器('的TestController',{});\r
\r
}));\r
\r
它('应该有定义的模型和testController.model.name等于controllerAs VM测试,函数(){\r
预期(的TestController).toBeDefined();\r
期待(testController.model).toBeDefined();\r
期待(testController.model.name).toEqual(controllerAs VM测试);\r
});\r
\r
它('不应该有一个名为虚拟机属性,函数(){\r
期待(testController.vm).toBeUndefined();\r
});\r
});
\r
<链接HREF =https://cdnjs.cloudflare.com/ajax /libs/jasmine/2.2.1/jasmine.css的rel =stylesheet属性/>\r
&所述; SCRIPT SRC =https://cdnjs.cloudflare.com/ajax/libs/jasmine/2.2.1/jasmine.js>&下; /脚本>\r
&所述; SCRIPT SRC =https://cdnjs.cloudflare.com/ajax/libs/jasmine/2.2.1/jasmine-html.js>&下; /脚本>\r
&所述; SCRIPT SRC =https://cdnjs.cloudflare.com/ajax/libs/jasmine/2.2.1/boot.js>&下; /脚本>\r
&所述; SCRIPT SRC =https://ajax.googleapis.com/ajax/libs/angularjs/1.4.0-beta.4/angular.min.js>&下; /脚本>\r
&LT;脚本src=\"https://ajax.googleapis.com/ajax/libs/angularjs/1.4.0-beta.4/angular-mocks.js\"></script>\r
\r
\r
I use John papa angular style guide my controller looks like:
following the style John papa style controller style guide:
function testController() {
var vm = this;
vm.model = { name: "controllerAs vm test" };
}
My testing code looks like:
describe('Controller: testController', function () {
beforeEach(module('myApp'));
var testController;
beforeEach(inject(function ($controller) {
scope = {};
testController = $controller('testController', {
});
}));
it('should have vm.model defined and testController.vm.model is equal to controllerAs vm test', function () {
expect(testController.vm).toBeDefined();
expect(testController.vm.model).toBeDefined();
expect(testController.vm.model.name).toEqual("controllerAs vm test");
});
});
Result:
Test failed:Result Message: Expected undefined to be defined. at stack
So my question is how can we test vm.model and other variables from this? I have not found proper guide line in the guide lines: controllers
解决方案 The vm
is equal to the instance itself via vm = this;
Therefore, all the properties are hanging directly off of the object.
function foo(){
var vm = this;
vm.name = 'Josh';
}
var myFoo = new foo();
myFoo.name; // 'Josh';
So all you need to do is change your expectations to remove the vm
property.
expect(testController).toBeDefined();
expect(testController.model).toBeDefined();
expect(testController.model.name).toEqual("controllerAs vm test");
In order to prove this, here is your exact example, and the associated Jasmine tests.
function testController() {
var vm = this;
vm.model = {
name: "controllerAs vm test"
};
}
angular.module('myApp', [])
.controller('testController', testController);
describe('Controller: testController', function() {
beforeEach(module('myApp'));
var testController;
beforeEach(inject(function($controller) {
scope = {};
testController = $controller('testController', {});
}));
it('should have model defined and testController.model.name is equal to controllerAs vm test', function() {
expect(testController).toBeDefined();
expect(testController.model).toBeDefined();
expect(testController.model.name).toEqual("controllerAs vm test");
});
it('should not have a property called vm', function() {
expect(testController.vm).toBeUndefined();
});
});
<link href="https://cdnjs.cloudflare.com/ajax/libs/jasmine/2.2.1/jasmine.css" rel="stylesheet" />
<script src="https://cdnjs.cloudflare.com/ajax/libs/jasmine/2.2.1/jasmine.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jasmine/2.2.1/jasmine-html.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jasmine/2.2.1/boot.js"></script>
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.4.0-beta.4/angular.min.js"></script>
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.4.0-beta.4/angular-mocks.js"></script>
这篇关于如何测试茉莉花约翰爸爸vm.model单元测试?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!