javascript - 如何用 Jasmine 测试这个 Javascript

标签 javascript json jasmine karma-jasmine

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

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

var foo = {
    testFunc: function() {
        hub.server.shoot(true, username, gameCode);
   }
}

我使用 Jasmine 作为我的测试框架,并且我尝试了 Karma 和 Chutzpah 作为我的测试运行器。

在我的测试项目中,我尝试引用上面的文件,我尝试了很多不同的事情,但我似乎无法理解它。测试看起来像这个 atm。

/// <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();

        });


});

testFunc 尚未被调用说:

TypeError: Cannot read property 'click' of null

我认为这意味着它无法点击我的shootBtn

是否无法对此进行测试,或者我做错了什么?

最佳答案

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

   spyOn(document, "getElementById").andCallFake(() => ({
       click: () => foo.testFunc()
   })); 

jsFiddle

否则,创建一个 id = ShootBtn 的元素,为其附加一个点击处理程序,然后将其添加到正文(所有这些都应在测试中完成)

jsFiddle

关于javascript - 如何用 Jasmine 测试这个 Javascript,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50212179/

相关文章:

javascript - 按钮单击事件后显示文本框

javascript - 使用 D3 进行回调

php - 将 PHP 数组传递给 JavaScript 函数不起作用

json - 从 curl 命令输出中获取值

javascript - 基本通话功能故障排除

javascript - 在 ReSharper JavaScript 测试中共享引用路径

"components should create "测试用例的 Angular 5 单元测试抛出错误

javascript - 无法在 Jasmine JS 的测试用例中创建 "if statement"

javascript - 尝试隐藏文档,直到它被 JavaScript 更新

c# - 动态 linq :Creating an extension method that produces JSON result