简体   繁体   English

JavaScript Jasmine测试失败

[英]JavaScript Jasmine Test Failing

I have this specific JavaScript code 我有这个特定的JavaScript代码

function hideGreenCarsFromView(greenCar) {
                    if (greenCar) {
                        var car = parkingCarTools.getContainerOfgreenCar(greenCar, sr.pageModel.garageData.cars);
                        if (car && car.greenCars && car.greenCars.length > 0) {
                            parkingCarTools.removegreenCarFromgreenCarsList(greenCar, car.greenCars);
                        }
                    }

                    if (car.greenCars && car.greenCars.length == 0) {
                        sr.showgreenCarsHeader = false;
                    }
                };

In this code snippet I am removing the green cars I have in a list from the view. 在这段代码中,我将从视图中删除列表中的绿色汽车。

To test this I have written a Jasmine test which looks like the following: 为了测试这个,我写了一个Jasmine测试,如下所示:

    it('when green car is invalidLicensePlate, should not remove green car from view', function() {
        //Arrange
        var myGreenCars = undefined;
        var expectedGreenCars = [{
            licensePlateNumber: 1,
            description: "BMW",
            quantity: 1,
            greencars: [{
                licensePlateNumber: 4,
                ownersNumber: 1,
                description: 'vallicensePlateNumber green car 1',
                quantity: 1
            }, {
                licensePlateNumber: 5,
                ownersNumber: 1,
                description: 'vallicensePlateNumber green car 2',
                quantity: 2
            }]
        }, {
            licensePlateNumber: 2,
            description: "Mazda",
            quantity: 3,
            greencars: [{
                licensePlateNumber: 6,
                ownersNumber: 2,
                description: 'vallicensePlateNumber green car 3',
                quantity: 1
            }, {
                licensePlateNumber: 7,
                ownersNumber: 2,
                description: 'vallicensePlateNumber green car 4',
                quantity: 2
            }]

        }, {
            licensePlateNumber: 3,
            description: "Toyota",
            quantity: 1
        }];

        //Act
        dut = compileDirective();
        dut.removegreen carItemFromView(myGreenCars);

        //Assert
        expect(dut.pageModel.cartData.items.length).toBe(3);
        expect(dut.pageModel.cartData.items).toEqual(expectedGreenCars);
        expect(dut.pageModel.cartData.items[0].greencars.length).toBe(2);
        expect(dut.pageModel.cartData.items[1].greencars.length).toBe(2);
    });

My test fails at dut.removegreen carItemFromView(myGreenCars); 我的测试在dut.removegreen carItemFromView(myGreenCars);失败了dut.removegreen carItemFromView(myGreenCars);

I get the 我明白了

'undefined' in not an object (evaluating 'car.greenCars') 'undefined'不在对象中(评估'car.greenCars')

error. 错误。

What am I doing wrong here ? 我在这做错了什么? this is my first time doing Jasmine tests, I am a little lost, thank you in advance. 这是我第一次做茉莉花测试,我有点失落,提前谢谢你。

at the top of the test, you set myGreenCars to undefined which is then passed in. It goes through some code that we can't see and is ultimately passed to hideGreenCarsFromView , I assume still as undefined . 在测试的顶部,你将myGreenCars设置为undefined ,然后传入。它会通过一些我们看不到的代码并最终传递给hideGreenCarsFromView ,我认为仍然是undefined

if (greenCar) evaluates to false, so it skips the initialization of car and then hits the next if statement and calls .greenCars on car , which is undefined . if (greenCar)计算结果为false,那么它会跳过car的初始化,然后点击下一个if语句并在car上调用.greenCars ,这是undefined

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM