单元测试过滤器错误:预期null等于[object]
Unit testing filter error: Expected null to equal [object]
我对AngularJS和单元测试(Jasmine)有点陌生。我一直在尝试运行一个过滤测试,我一直得到"预期null等于Volvo"。我明白,由于某种原因,当我调用filterInstance(cars,1)时,我总是返回null -因为在汽车中找不到。你能帮我找出我的错误吗?
filters.js:
var vmaFilterModule = angular.module('FilterModule', []);
vmaFilterModule.filter('getById', function() {
return function(input, id) {
var i=0, len=input.length;
for (; i<len; i++) {
if (+input[i].id == +id) {
return input[i];
}
}
return null;
}
});
filtertest.js
describe("Filter Test", function () {
var cars = ["Saab", "Volvo", "BMW"];
var filterInstance;
beforeEach(angular.mock.module("FilterModule"));
beforeEach(angular.mock.inject(function ($filter) {
filterInstance = $filter("getById");
}));
it("gets correct car", function () {
expect(filterInstance(cars, 1)).toEqual("Volvo");
});
});
改成这个…
注:无输入[i]。
var vmaFilterModule = angular.module('FilterModule', []);
vmaFilterModule.filter('getById', function() {
return function(input, id) {
var i=0, len=input.length;
for (; i<len; i++) {
if (i == +id) {
return input[i];
}
}
return null;
}
});
但是,如果INPUT总是一个数组,并且ID总是作为第二个参数传递,那么就不必循环了。
var vmaFilterModule = angular.module('FilterModule', []);
vmaFilterModule.filter('getById', function() {
return function(input, id) {
if( !input ){ return null; }
return input[id] || null; // Like you did, use the + to force number if needed.
});
更新2
如果你的数据是这样的…
var cars = [ { content: "Scion", id: 4 }, { content: "Volvo", id: 2 }, { content: "Honda", id: 3 }, { content: "Toyota", id: 7 } ];
然后不改变过滤器中的任何,您可以这样测试…
it( "gets correct car", function(){
expect( filterInstance(cars, 2).content ).toEqual( "Volvo" );
}); // notice the .content change.
你的过滤器将返回一个像这样的对象
{ content: "Volvo", id: 2 }
这意味着您必须使用要求值的值调用属性。
相关文章:
- 测试索引值是否等于某个数字的倍数
- 函数未在Object.keys或Object.getOwnPropertyNames下列出,但可以调用
- delete在Object上效率低下,但在DOM Element's的数据属性,与null out相比
- 有没有一种方法可以列出Ember.Object的所有绑定
- 如何检查数组中的对象是否等于选项值
- 如何取消object.prototypes javascript的一个函数
- ajax在输入等于null时进行检查
- 为什么是文档.旧版应用程序中的DOM-object.properties为null
- 如何将Date字段设置为等于另一个Date+Int值,该值表示月份值
- 将*.js文件的内容放入Object中
- 我怎么能让流星简单模式中的一个字段等于一个js变量,并且仍然让用户填写简单模式的其余部分
- Object.prototype using 'this'
- dractor.js应为[]等于[“..”,“..”]
- 使用Object.create()的角度服务继承
- 如何使用object.assign()从其他对象引用基本对象属性
- CORS:访问控制允许原点不等于提供的原点
- 循环的数组推入在Object容器中具有不同的值
- 预期 null({ }) 等于 Object({ })
- 为什么“this”不等于“Object”,为什么属性是“undefined”
- 单元测试过滤器错误:预期null等于[object]