如何测试茉莉花约翰爸爸vm.model单元测试? [英] How to test John papa vm.model unit testing with jasmine?

查看:97
本文介绍了如何测试茉莉花约翰爸爸vm.model单元测试?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我用爸爸约翰棱角分明的风格指南我的控制器是这样的:

下面的样式约翰爸爸风格控制器风格指南

 函数的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).to​​BeDefined();
期待(testController.model).toBeDefined();
期待(testController.model.name).toEqual(controllerAs VM测试);

为了证明这一点,这里是你的确切的例子,以及相关的茉莉花测试。

\r
\r

函数的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).to​​BeDefined();\r
    期待(testController.model).toBeDefined();\r
    期待(testController.model.name).toEqual(controllerAs VM测试);\r
  });\r
\r
  它('不应该有一个名为虚拟机属性,函数(){\r
    期待(testController.vm).toBeUndefined();\r
  });\r
});

\r

<链接HREF =htt​​ps://cdnjs.cloudflare.com/ajax /libs/jasmine/2.2.1/jasmine.css的rel =stylesheet属性/>\r
&所述; SCRIPT SRC =htt​​ps://cdnjs.cloudflare.com/ajax/libs/jasmine/2.2.1/jasmine.js>&下; /脚本>\r
&所述; SCRIPT SRC =htt​​ps://cdnjs.cloudflare.com/ajax/libs/jasmine/2.2.1/jasmine-html.js>&下; /脚本>\r
&所述; SCRIPT SRC =htt​​ps://cdnjs.cloudflare.com/ajax/libs/jasmine/2.2.1/boot.js>&下; /脚本>\r
&所述; SCRIPT SRC =htt​​ps://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单元测试?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆