【问题标题】:Unit Testing PhantomJS Error: Can't find variable: Dexie单元测试 PhantomJS 错误:找不到变量:Dexie
【发布时间】:2016-10-17 00:16:11
【问题描述】:

我试图解决的问题在下面显示的输出中表示:

15 06 2016 11:11:16.532:INFO [karma]: Karma v0.13.22 server started at http://localhost:9876/
15 06 2016 11:11:16.532:INFO [launcher]: Starting browser PhantomJS
15 06 2016 11:11:18.004:INFO [PhantomJS 2.1.1 (Windows 8 0.0.0)]: Connected on socket /#3nWVSRqI9N9XmHSCAAAA with id 41039744
PhantomJS 2.1.1 (Windows 8 0.0.0) ERROR
  Error: Can't find variable: Dexie
    Error loading C:/My/My.App/src/My.App.Web/test/case/MyObjectTest.js
[11:11:18] Finished 'test' after 2.8 s

我正在尝试测试MyObject。它的依赖结构是这样的:

MyObject
    - MyObjectDependency
        - MyObjectDependency_Dependency
            - Dexie

换句话说,MyObject 依赖于 MyObjectDependency,而 MyObjectDependency 又依赖于 MyObjectDependency_Dependency,而 MyObjectDependency_Dependency 最终依赖于 Dexie。

我正在用 TypeScript 编写一个 Aurelia 网络应用程序。我已经通过 jspm 包含了 Dexie 库(indexedDB 包装器)。为了让应用程序能够构建/运行,我必须使用脚本标签将 jspm_packages 文件夹中的 dexie.js 直接包含到 index.html 中。

我试图让 Dexie 使用 SystemJS 加载(就像它应该的那样),但是失败了。

我尝试更新我的 karma 配置以明确包含 dexie.js,但它没有解决上面输出中描述的错误。

我还尝试更新正在使用的各种组件的版本,但似乎也没有任何帮助。

以下是我正在使用的关键组件的版本:

节点:4.4.4

JSPM:0.16.15

SystemJS:0.19.6

PhantomJS:2.1.7

业力:0.13.22

德西:1.3.6

我已经走到了死胡同。我不知道还能去哪里看。

如果需要任何其他信息,请告诉我 - 我很乐意补充。

谢谢

【问题讨论】:

标签: typescript phantomjs aurelia systemjs dexie


【解决方案1】:

我试图让 Dexie 使用 SystemJS 加载(就像它应该的那样),但是失败了。

如果没有更多信息,我最好的猜测是您没有正确包含它。

import 'dexie';

在此处查看答案以获取更多信息。

Would it be possible to use JQuery Bootstrap framework along with Aurelia?

【讨论】:

  • 谢谢@Matthew。这样做确实适用于 Web 应用程序的构建/运行。问题是当我尝试测试时,我仍然得到原始问题中描述的错误。如果有帮助,我可以更新问题以包含我的配置。
【解决方案2】:

在 Matthew James Davis 和 alexibs 的帮助下,我找到了解决方案。非常感谢你们!

Matthew 说得对,我错误地导入了 dexie,我能够通过接受 alexibs 的建议并在 Chrome 中而不是 PhantomJS 中进行测试来找到确切的位置。

似乎 Dexie 软件包附带的 *.d.ts 文件没有被 VS2015 识别——这是我目前正在解决的问题。我将自己的 *.d.ts 文件添加到 custom_typings,明确指定模块 'dexie'。

我从 Dexie 复制了定义文件并将最后一行从

export default Dexie;

到:

declare module "dexie" {
    export default Dexie;
}

有了这个版本的 dexie.d.ts,VS2015 现在对 Dexie 文档支持的 import 语句感到满意:

import Dexie from 'dexie'.

在创建我的 Dexie 表类期间,按照 Dexie 文档的建议,我添加了以下几行:

const Promise = Dexie.Promise; // KEEP! (or loose transaction safety in await calls!)
const all = Promise.all;

因为我没有导入 dexie,所以我遇到的所有地方都崩溃了。

创建类型定义后,只需将 import import Dexie from 'dexie' 添加到这些文件中即可最终解决问题。

【讨论】:

    猜你喜欢
    • 2013-02-24
    • 2017-03-25
    • 2023-03-24
    • 2023-03-30
    • 2018-08-05
    • 1970-01-01
    • 1970-01-01
    • 2018-03-02
    • 1970-01-01
    相关资源
    最近更新 更多