gpt4 book ai didi

javascript - 使用 jasmine 模拟函数调用

转载 作者:行者123 更新时间:2023-11-28 11:55:03 24 4
gpt4 key购买 nike

开始使用HotTowelAngular模板,我正在设置单元测试。遇到了障碍。

我正在尝试测试 Controller 中的一个函数,该函数碰巧调用了另一个名为“log”的函数。这个“log”是一个存储在私有(private)变量中的函数,它从名为“common”的依赖项中获取其值。

我知道我可能需要以某种方式 stub 这个函数,但我不确定从哪里开始这个特定的例子,因为我对 angularjs、jasmine 等还很陌生。任何想法都表示赞赏

单元测试:

describe("quote", function () {
var scope,
controller,
common;

beforeEach(inject(function($rootScope, $controller, _common_) {
scope = $rootScope.$new();
common = _common_;
controller = $controller;
}));

describe("removeAttachment", function() {

it("should remove the attachment when requested", function() {
var vm = controller("quote", { $scope: scope });

vm.attachmentList.push({ FileName: "file1", FileAsString: "..." });
vm.attachmentList.push({ FileName: "file2", FileAsString: "..." });
vm.attachmentList.push({ FileName: "file3", FileAsString: "..." });
expect(vm.attachmentList.length).toEqual(3);

// here's the call where it fails
vm.removeAttachment(vm.attachmentList[1]);

expect(vm.attachmentListCount).toEqual(2);
expect(vm.attachmentList.length).toEqual(2);
expect(vm.attachmentList[1].FileName).toBe("file3");
});
});
});

Controller :

 var getLogFn = common.logger.getLogFn;
var log = getLogFn(controllerId);

function removeAttachment(attachment) {

// need to stub this out
log('removing attachment: ' + attachment.FileName);

vm.attachmentList.splice(vm.attachmentList.indexOf(attachment), 1);
vm.attachmentListCount = vm.attachmentList.length;
}

Jasmine 的错误:

类型错误:“未定义”不是函数(评估“log('删除附件:'+attachment.FileName)'”)

最佳答案

在您的测试中,您应该有controller = $contoller("YourController", {it's dependency});

您可能不想传递您的通用服务,而是创建一个返回函数的 stub 。

var  wrapper = {logger: function () {}};
var stub = { logger: { getLogFun: function() {return wrapper.logger} }};

您可以通过它来代替您的公共(public)服务。

您现在可以通过以下方式监视它:

spyOn(wrapper, 'logger');

关于javascript - 使用 jasmine 模拟函数调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25509093/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com