Javascript json中不同匹配的Jasmine测试

Javascript json中不同匹配的Jasmine测试,javascript,angularjs,unit-testing,jasmine,Javascript,Angularjs,Unit Testing,Jasmine,我想用下面的代码实现jasmine测试: 这是我的filter-service.js function FilterService() { } FilterService.prototype.filter = function (companies, filter) { return companies; }; 我的filter-service-spec.js是 describe("Filter service filter(...) tests", function

我想用下面的代码实现jasmine测试:

这是我的filter-service.js

 function FilterService() { 
 }

 FilterService.prototype.filter = function (companies, filter) {
   return companies;
 };
我的filter-service-spec.js是

    describe("Filter service filter(...) tests", function() {
var filterService = new FilterService();
var allTestCompanies= [
    { id: 1, name: "company1 Test", admin: "Test Admin" },
    { id: 2, name: "company2", admin: "Test Admin", country: 'London' },
    { id: 3, name: "company3", admin: "Mery Phill" }      
];        

it('returns original collection if called with undefined filter', function() {
    var input = [1, 2, 3];

    var result = filterService.filter(input, undefined);

    expect(result).toEqual(input);
});
it('returns original collection if called with empty filter', function () {
    var input = [2, 6, 7];

    var result = filterService.filter(input, '');

    expect(result).toEqual(input);
});

it('only includes matching companies once', function() {
    var result = filterService.filter(allTestCompanies, 'Test');

    expect(result.length).toEqual(2);
});

it('matches exact text on company name', function() {
    var result = filterService.filter(allTestCompanies, "company1 Test");

    expect(result[0]).toEqual(allTestCompanies[0]);
});
it('matches exact text contained in company name', function () {
    var result = filterService.filter(allTestCompanies, "Test");

    expect(result[0]).toEqual(allTestCompanies[0]);
});
it('matches case invarient text contained in company name', function () {
    var result = filterService.filter(allTestCompanies, "test");

    expect(result[0]).toEqual(allTestCompanies[0]);
});

it('matches exact text of admin', function() {
    var result = filterService.filter(allTestCompanies, 'Mery Phill');

    expect(result[0]).toEqual(allTestCompanies[2]);
});
it('matches exact text in admin', function () {
    var result = filterService.filter(allTestCompanies, 'Phil');

    expect(result[0]).toEqual(allTestCompanies[2]);
});
it('matches case invarient text in admin', function () {
    var result = filterService.filter(allTestCompanies, 'PHIl');

    expect(result[0]).toEqual(allTestCompanies[2]);
});   
});

如何在filter-service.js中实现函数以通过javascript测试。现在只需先通过2。

当然,这实际上很容易做到,但我将提供您应该采取的方法。所以让我们开始

  • 我希望您有一个能够运行测试的环境(安装了Jasmine,并且能够针对“FilterService”对象和“filter”方法运行测试)。你说前两种方法成功了
  • 每个Jasmine“it”函数都有描述,例如“匹配公司名称上的精确文本”(测试4)。这是你将要处理的最重要的部分。我们将讨论这个测试。问问自己这个描述告诉了你什么?这意味着,如果您将公司的确切名称传递到“filter”方法中,该函数应该遍历给定公司对象的数组,并尝试查找与确切公司名称匹配的项
  • 接下来,您需要了解Jasmine“expect”函数的实现。您会注意到,“filter”函数调用返回的结果必须等于给定公司数组的第一个元素,因为filter参数中的公司名称与该对象的“name”匹配
  • 在实现此部分并测试成功后,您将转到下一个测试并添加/更改现有实现以完成下一个“it”描述
  • 这称为TDD(测试驱动开发)。在你开始工作之前,请先读一读

    最后,让我们尝试实施这个测试。请注意,提供的代码可能不起作用,但我们同意您将使其起作用,我只是展示了方法

    function FilterService() { 
    }
    
    FilterService.prototype.filter = function (companies, filter) {
     // this is our result variable which we will return at the end
     var result;
     // for test #1 the "filter" parameter is undefined and the test description says "returns original collection if called with undefined filter" (#2 will look similar to test #1, add this by yourself)
     if (typeof filter === "undefined") {
        result = companies;
     }
     // jump to test #4 we are talking about. "it" says "matches exact text on company name"
     companies.forEach( function (companyObj) {
       if (companyObj.name === filter) {
         result = [companyObj];
         return false;
       }
     });
     // continue to modify the function to meet all criteria of every "it" description
    
     // we return our result
     return result;
    };
    

    您的代码除了返回传入的第一个参数外,什么都不做。因此,如果您根据第一个参数测试结果,它们当然会通过。你还没有告诉我们你想做什么,就好像你想让别人为你写代码,你会让别人为你写代码吗?