【问题标题】:JavaScript Jasmine Test FailingJavaScript 茉莉花测试失败
【发布时间】:2016-05-25 14:57:42
【问题描述】:

我有这个特定的 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;
                    }
                };

在这段代码 sn-p 中,我从视图中删除列表中的绿色汽车。

为了测试这一点,我编写了一个 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);
    });

我的测试在 dut.removegreen carItemFromView(myGreenCars); 失败

我明白了

'undefined' 不是对象(评估'car.greenCars')

错误。

我在这里做错了什么?这是我第一次做茉莉花测试,我有点迷茫,提前谢谢你。

【问题讨论】:

  • 如果 (car.greenCars && car.greenCars.length == 0),我无法模拟以下代码行

标签: javascript unit-testing testing jasmine


【解决方案1】:

在测试的顶部,您将myGreenCars 设置为undefined,然后将其传入。它通过一些我们看不到的代码并最终传递给hideGreenCarsFromView,我假设仍然是@ 987654324@.

if (greenCar) 的计算结果为 false,因此它会跳过 car 的初始化,然后点击下一个 if 语句并在 car 上调用 .greenCars,即 undefined

【讨论】:

  • 我不明白如何模拟这行代码 if (car.greenCars && car.greenCars.length == 0)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-12-13
  • 1970-01-01
  • 1970-01-01
  • 2015-01-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多