Ric*_*rmo 9 javascript jasmine angularjs
我正在为一个angularjs工厂写一些测试,一些期望不起作用,我真的不知道为什么.
这是我的工厂(部分).'使用严格';
angular.module('myAppMod')
.factory('Person', function(BaseModel) {
return BaseModel.extend({
get fullname() {
var name = [];
if (this.first_name) {
name.push(this.first_name);
}
if (this.person_extra && this.person_extra.middle_name) {
name.push(this.person_extra.middle_name);
}
if (this.last_name) {
name.push(this.last_name);
}
return name.join(' ');
}
});
});
Run Code Online (Sandbox Code Playgroud)
和茉莉花测试:
var p;
beforeEach(function() {
p = new Person({
first_name: 'first_name',
person_extra: {
middle_name: 'middle_name',
media_item_id: null
},
last_name: 'last_name',
security_level: 'security_level'
}, true);
});
it("has a fullname", function() {
expect(p.fullname).toEqual('first_name middle_name last_name');
});
Run Code Online (Sandbox Code Playgroud)
p.fullname正在返回""(空字符串)并在工厂中console.log(this.first_name),是undefined.
任何帮助都非常感谢.先感谢您
编辑:经过进一步调查,我改变了我的答案.
它无法正常工作,因为您通过该方法使用getter简写(get fnName() { })extend.该吸的 this是匿名的对象本身并不会继承骨干模型的方法和属性,而this在功能特性做.我已经制作了一个说明问题的代码.
也就是说,如果这是你的模特
var Model = BaseModel.extend({
get isBackboneModelThroughGetter() {
return !!this.get;
},
isBackboneModel: function() {
return !!this.get;
},
});
Run Code Online (Sandbox Code Playgroud)
那么Model的一个实例将使这个测试通过:
it('should make you wonder', function() {
var model = new Model();
expect(model.isBackboneModel()).toBe(true);
expect(model.isBackboneModelThroughGetter).not.toBe(true);
});
Run Code Online (Sandbox Code Playgroud)
因此,要使您的工厂工作,您将需要:
this.get('propertyName')而不是this.propertyNamefull_name : function() { /*...*/ }而不是get full_name() { /* ... */ }model.full_name通过model.full_name();| 归档时间: |
|
| 查看次数: |
1046 次 |
| 最近记录: |