【问题标题】:Unit testing in angular using IIFE throw a reference error?使用 IIFE 进行角度单元测试会引发参考错误?
【发布时间】:2016-01-19 16:39:38
【问题描述】:

我目前正在使用 IIFE(立即调用函数表达式)为驱动程序脚本编写一个简单的测试用例。这是我的驱动程序脚本。

driver.js

(function() {
"use strict";

var app = angular
    .module("myApp", [
        "ui.bootstrap",
        "ui.sortable"
    ]);
}());

这是我的规范 driver.spec.js

describe("application configuration tool driver", function() {
 it("should create an angular module named myTest", function() {
    expect(app).toEqual(angular.module("myApp"));
 });
});

当我使用 IIFE 运行我的规范时。我收到 ReferenceError: app is not defined.

如果我在没有 IIFE 的情况下运行驱动程序脚本:

var app = angular
    .module("myApp", [
        "ui.bootstrap",
        "ui.sortable"
    ]);

我的规范通过了。对使用 IIFE 通过规范有何想法?

【问题讨论】:

  • 变量 app 是 IIFE 的本地变量,但测试 expect(app).toEqual(angular.module("myApp")); 对我来说毫无意义。
  • 为什么还需要变量app
  • 我使用变量app 来创建自定义指令和控制器。
  • @charlietfl 一些写得很糟糕的例子,说明如何结合使用 angular show var appapp.controller ...app.factory ...,不幸的是人们不知道这是一种反模式。
  • @Claies 我最近正在阅读它,但我在这里的意图是我所有的控制器、指令都包含在 IIFE 中。因此,对于一个简短的演示,我使用了变量 app。

标签: angularjs karma-jasmine iife


【解决方案1】:

您可以将app 移回外部范围(当然,如果您可以选择的话):

var app;
(function(app) {
    "use strict";

    app = angular
        .module("myApp", [
            "ui.bootstrap",
            "ui.sortable"
        ]);
}(app));

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-09-12
    • 1970-01-01
    • 2018-11-16
    • 2020-06-25
    • 1970-01-01
    • 2021-05-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多