如何用Jasmine测试这个Javascript

如何用Jasmine测试这个Javascript,javascript,json,jasmine,karma-jasmine,Javascript,Json,Jasmine,Karma Jasmine,我有一个问题,我想测试这个javascript $("#ShootBtn").on('click', () => foo.testFunc()); var foo = { testFunc: function() { hub.server.shoot(true, username, gameCode); } } 我使用Jasmine作为我的测试框架,并且我尝试了Karma和Chutzpah作为我的测试运行者 在我的测试项目中,我试图参考上面的文件,我尝试了

我有一个问题,我想测试这个javascript

$("#ShootBtn").on('click', () => foo.testFunc());

var foo = {
    testFunc: function() {
        hub.server.shoot(true, username, gameCode);
   }
}
我使用Jasmine作为我的测试框架,并且我尝试了Karma和Chutzpah作为我的测试运行者

在我的测试项目中,我试图参考上面的文件,我尝试了很多不同的东西,但我似乎无法理解它。这个测试看起来像这个自动取款机

/// <reference path="../../TankWebApplication/Scripts/jquery-3.3.1.js"/>
/// <reference path="../../TankWebApplication/Scripts/virtualjoystick.js"/>
/// <reference path="../../TankWebApplication/Scripts/gameController.js"/>


describe("DefaultTest",
function () {

    beforeEach(function() {

    })

    it("Test",
        function() {
            spyOn(foo, 'testFunc');
            document.getElementById('ShootBtn').click();
            expect(foo.testFunc).toHaveBeenCalled();

        });


});
我想这意味着它不能点击我的shootBtn


是否无法测试此问题,或者我做错了什么?

您可以监视document.getElementById并使其返回具有单击功能的对象:

   spyOn(document, "getElementById").andCallFake(() => ({
       click: () => foo.testFunc()
   })); 
否则,创建一个id=ShootBtn的元素,附加一个click处理程序,然后将其添加到主体中。所有这些都应该在测试内部完成


谢谢:这是否意味着不可能从Javascript触发按钮事件处理程序,这样就可以测试它是否调用了正确的函数?检查我的第二个示例在该示例中,您是否添加了一个新的事件侦听器,而不是使用我的原始文件中已创建的事件侦听器?您可以这样做,我只是觉得没有必要使用jQuery
   spyOn(document, "getElementById").andCallFake(() => ({
       click: () => foo.testFunc()
   }));