javascript - Jasmine spyOn - jQuery 匿名函数中不存在方法

标签 javascript jquery jasmine

已在 SO 和其他论坛上搜索此问题的答案。没有找到解决方案。

我遇到了 Jasmine 无法在 jQuery 代码块内找到函数的问题,无论 Jasmine 代码是否在 jQuery 函数内。

$(function() {
    function foo(param1, param2) {
        // some code
    }

    describe("Foo function", function () {

        spyOn(window, 'foo');

        foo(1, 2);

        it("Should be found by Jasmine", function(){
            expect(window.foo).toHaveBeenCalled();
        });
    });
});

Error: foo() method does not exist

我还尝试了 spyOn($, 'foo')spyOn($.fn, 'foo') 等。

另外,下面的代码也不起作用。

$(function() {
    function foo(param1, param2) {
        // some code
    }
});

describe("Foo function", function () {

    spyOn(window, 'foo');

    foo(1, 2);

    it("Should be found by Jasmine", function(){
        expect(window.foo).toHaveBeenCalled();
    });
});

那么如何使这两个代码块工作(即 Jasmine 代码在 jQuery 函数内部的位置,以及它在 jQuery 函数外部的位置)?

最佳答案

我讨厌回答我自己的问题,但我宁愿这样也不愿其他人不从我的错误中吸取教训。

这里有两个问题:

  1. Jasmine 需要一个包含对象
  2. 您不能访问 JS 函数范围之外的函数/变量

1 - Jasmine spy 需要使用一个容器对象,如果找不到,你只需要自己制作一个。所以下面的代码有效:

// Using Jasmine inside of a jQuery anon function
$(function () {

    function foo() {
        // Some code
    }

    describe("Foo function", function () {

        it("Should be findable by Jasmine", function () {
            var Thing = {}
            Thing.foo = foo;
            spyOn(Thing, 'foo');
            Thing.foo(2)
            expect(Thing.foo).toHaveBeenCalled();
        });
    });
});

2 - 如果在 jQuery anon 函数之外有 describe block ,它将无法访问 jQuery block 内的任何值,因此上面的第二个代码示例将不会工作,无论你做什么。

关于javascript - Jasmine spyOn - jQuery 匿名函数中不存在方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24748702/

相关文章:

javascript - 如何将 HTML 隐藏表单字段提交到 iPad iOS Safari 和/或 Chrome?

javascript - 如何在 JavaScript 中找出元素的 lang 属性的计算值?

javascript - 函数内的 Jquery bind()/live()

javascript - 使用发布请求的结果更新网页的正确方法

javascript - 从 React Native 中的 FlatList 中删除项目无法正确渲染

javascript - HTML5 Canvas 变形

javascript - 如何使用 Bootstrap 3 在悬停时创建滑动图像?

angularjs - 通过右键菜单在 Web Storm 中运行单个 Karma Jasmine 测试

testing - 如何使用 runSaga/redux-saga 接收拍摄

angularjs - Protractor 无法与页面同步