Unit Testing PhantomJS Error: Can't find variable: Dexie

Unit Testing PhantomJS Error: Can't find variable: Dexie

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

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,最终依赖于 Dexie。

我正在用 TypeScript 编写一个 Aurelia 网络应用程序。我通过 jspm 包含了 Dexie 库(indexedDB 包装器)。要将应用程序安装到 build/run,我必须使用脚本标记将 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

Dexie: 1.3.6

我走到了死胡同。我不确定还有什么地方可以看。

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

谢谢

I tried to get Dexie to be loading using SystemJS (like it should) but, it fails.

在没有更多信息的情况下,我的最佳猜测是您没有正确包含它。

import 'dexie';

查看此处的答案了解更多信息。

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

Matthew 是对的,我错误地导入了 dexie,我能够通过在 Chrome 而不是 PhantomJS 中采纳 alexeibs 建议和测试来准确找到位置。

似乎 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 Dexie from 'dexie'.

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

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

因为我没有导入 dexie,所以我遇到的每个地方都坏了。

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