Atom飞行手册翻译: 3.8 编写spec
来源:互联网 发布:三国杀 姜维 知乎 编辑:程序博客网 时间:2024/06/07 02:03
编写 spec
我们已经通过一些例子查看并编写了一些spec,现在是更进一步查看spec框架本身的时候了。确切地说,你在Atom中如何编写测试呢?
Atom使用Jasmine作为spec框架。任何新的功能都要拥有specs来防止回归。
创建新的 spec
Atom的spec和包的spec都要添加到它们各自的spec
目录中。下面的例子为Atom核心创建了一个spec。
创建spec文件
spec文件必须以-spec
结尾,所以把sample-spec.coffee
添加到atom/spec
中。
添加一个或多个describe
方法
describe
方法有两个参数,一个描述和一个函数。以when
开始的描述通常会解释一个行为;而以方法名称开头的描述更像一个单元测试。
describe "when a test is written", -> # contents
或者
describe "Editor::moveUp", -> # contents
添加一个或多个it
方法
it
方法也有两个参数,一个描述和一个函数。尝试去让it
方法长于描述。例如,this should work
的描述并不如it this should work
便于阅读。但是should work
的描述要好于it should work
。
describe "when a test is written", -> it "has some expectations that should pass", -> # Expectations
添加一个或多个预期
了解预期(expectation)的最好方法是阅读Jasmine的文档。下面是个简单的例子。
describe "when a test is written", -> it "has some expectations that should pass", -> expect("apples").toEqual("apples") expect("oranges").not.toEqual("apples")
异步的spec
编写异步的spec刚开始会需要些技巧。下面是一些例子。
Promise
在Atom中处理Promise更加简单。你可以使用我们的waitsForPromise
函数。
describe "when we open a file", -> it "should be opened in an editor", -> waitsForPromise -> atom.workspace.open('c.coffee').then (editor) -> expect(editor.getPath()).toContain 'c.coffee'
这个方法可以在describe
、it
、beforeEach
和afterEach
中使用。
describe "when we open a file", -> beforeEach -> waitsForPromise -> atom.workspace.open 'c.coffee' it "should be opened in an editor", -> expect(atom.workspace.getActiveTextEditor().getPath()).toContain 'c.coffee'
如果你需要等待多个promise,对每个promise使用一个新的waitsForPromise
函数。(注意:如果不用beforeEach
这个例子会失败)
describe "waiting for the packages to load", -> beforeEach -> waitsForPromise -> atom.workspace.open('sample.js') waitsForPromise -> atom.packages.activatePackage('tabs') waitsForPromise -> atom.packages.activatePackage('tree-view') it 'should have waited long enough', -> expect(atom.packages.isPackageActive('tabs')).toBe true expect(atom.packages.isPackageActive('tree-view')).toBe true
带有回调的异步函数
异步函数的Spec可以waitsFor
和runs
函数来完成。例如:
describe "fs.readdir(path, cb)", -> it "is async", -> spy = jasmine.createSpy('fs.readdirSpy') fs.readdir('/tmp/example', spy) waitsFor -> spy.callCount > 0 runs -> exp = [null, ['example.coffee']] expect(spy.mostRecentCall.args).toEqual exp expect(spy).toHaveBeenCalledWith(null, ['example.coffee'])
访问Jasmine文档)来了解更多关于异步测试的细节。
运行 spec
大多数情况你会想要通过触发window:run-package-specs
来运行spec。这个命令不仅仅运行包的spec,还运行了Atom的核心spec。它会运行当前项目spec目录中的所有spec。如果你想要运行Atom的核心spec和所有默认包的spec,触发window:run-all-specs
命令。
要想运行spec的一个有限的子集,使用fdescribe
和fit
方法。你可以使用它们来聚焦于单个或者几个spec。在上面的例子中,像这样聚焦于一个独立的spec:
describe "when a test is written", -> fit "has some expectations that should pass", -> expect("apples").toEqual("apples") expect("oranges").not.toEqual("apples")
在CI中运行
在CI环境,类似Travis和AppVeyor中运行spec现在非常容易。详见文章“Travis CI For Your Packages”和“AppVeyor CI For Your Packages”。
- Atom飞行手册翻译: 3.8 编写spec
- Atom飞行手册翻译: 1.3 Atom基础
- Atom飞行手册翻译: 1.4 小结
- Atom飞行手册翻译: 2.3 文本选择
- Atom飞行手册翻译: 2.7 ~ 2.10
- Atom飞行手册翻译: 2.6 代码段
- Atom飞行手册翻译: 2.14 小结
- Atom飞行手册翻译: 3.1 ~ 3.2
- Atom飞行手册翻译: 3.5 创建主题
- Atom飞行手册翻译: 3.6 图标
- Atom飞行手册翻译: 3.7 调试
- Atom飞行手册翻译: 4.1 配置API
- Atom飞行手册翻译: 4.5 ~ 4.8
- Atom飞行手册翻译: 2.1 Atom中的包
- Atom飞行手册翻译: 2.2 在Atom中移动
- Atom飞行手册翻译: 2.11 Atom中的版本控制
- Atom飞行手册翻译: 2.12 在Atom中写作
- Atom飞行手册翻译: 4.4 Atom中的序列化
- [Android] animated-rotate简单的转菊花...
- Log4net按照不同级别写入多个日志文件
- iOS开发系列--C语言之存储方式和作用域
- How many zero's and how many digits ?
- Material Design in Action — 哔哩哔哩动画 Android 客户端
- Atom飞行手册翻译: 3.8 编写spec
- Implement Queue using Stacks
- 细数百度公司的知名开源项目
- pat-advance(1069-1072)
- Jquery 判断radio,selelct,checkbox是否选中
- 搞懂树状数组
- ROS学习--(十八)使用stage模拟器
- Mysql的DATE_FORMAT()应用
- iOS开发系列--C语言之构造类型