4

我是 Jasmine 的新手,但想在 Javascript 中做更多的 TDD。我一直在使用 Google 的 Angular 库,而且我知道Testacular是专门为测试 Angular 应用而创建的。

我已经阅读了 Jasmine 文档并观看了 Testacular 设置视频,但我无法进行最基本的测试。假设我有三个文件:

modules.js
controller.js
appSpec.js

modules.js 有我的模块定义,其中包含一些 .factory(...) 服务和一些 .directive(...) 自定义指令。controller.js 包含我的控制器,用于将模块连接到 html 视图。

到目前为止,一切都很好。接下来我添加了 appSpec.js。假设我想用它来测试我的模块中名为“Data”的服务,它有一个方法“getData()”,它返回一个资源。

在 testactular init 中,我告诉它观看所有三个文件。我运行 Testacular,它告诉我它正在观看正确的文件。极好的。

我不明白的是,我如何让 Jasmine 规范知道如何查看模块和控制器,以便对其进行测试。如果我简单地说:

describe('Data Service', function(){
  it ('should retrieve two items from the database', function(){
    data = Data.getData() //my angular service
    expect(data.length).toBe(2);
  });
});

毫不奇怪,它不知道 Data.getData() 是什么。

似乎很明显,在我开始编写套件之前,我应该以某种方式将我的模块定义和控制器纳入规范。一定很明显,以至于我在文档中看不到人们是如何做到的。教程似乎只是开始在 spec.js 文件中编写规范并假设一切正常。

我在这里看到过其他类似问题的帖子,但不可否认,它们都有我似乎缺乏的基础。例如,一篇文章谈到不手动创建控制器实例,而是注入依赖项。他为什么要创建一个新的 $rootScope 对象,他的模块是如何被引用的,等等......

我知道我的问题可能只是对 Jasmine 框架缺乏基本的了解,但我似乎无法从 Jasmine 自述文件中获得更多的理解。有人可以指出我应该如何工作的基本解释吗?

谢谢。

4

2 回答 2

2

尝试module('myModule')在茉莉花测试中做。

以下是一些开源 Angular 项目,它们有很好的测试可供查看:

角度应用

角度-ui

引导程序

于 2013-02-09T21:40:48.173 回答
0

包含测试定义的方式是通过 karma.config.js 文件

files = [ JASMINE, JASMINE_ADAPTER, '../app/lib/icg/object.js', '../app/lib/icg/geometry.js', '../app/lib/icg/ubiquity.js', '../test/unit/icgUbiquitySpec.js', '../test/unit/icgObjectSpec.js' ];

在这里,您定义哪些文件被加载到您的浏览器中,第一个不包含“规范”一词的文件是定义,而包含的文件是我的测试文件。您需要在测试之前包含定义,以便在运行测试之前定义它们,这就是我最后包含所有规范文件的原因。

于 2013-06-17T16:20:05.453 回答