angular-cn/public/docs/ts/latest/testing/jasmine-testing-101.jade

314 lines
13 KiB
Plaintext
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

include ../_util-fns
:marked
Well write our tests with the [Jasmine test framework](http://jasmine.github.io/2.3/introduction.html).
Well start by getting *some* tests to work - *any* tests at all.
我们将使用[Jasmine测试框架](http://jasmine.github.io/2.3/introduction.html)编写我们的测试。
我们以把*一些*测试弄成功为开始。
We will learn
- basic Jasmine testing skills
- to run our tests in the browser
- to write simple Jasmine tests in TypeScript
- to debug a test in the browser
我们会学到:
- 基础Jasmine测试技能
- 在浏览器里面运行我们的测试
- 使用TypeScript编写简单的Jasmine测试
- 在浏览器里调试一个测试
**Create a new project folder** perhaps called `angular2-unit-testing`.
**新建一个项目目录**,起名为`angular2-unit-testing`。
.l-main-section
:marked
## Install npm packages locally
## 本地安装npm包
Next follow all of the steps prescribed in “Install npm packages locally” of the
[QuickStart](../quickstart.html).
下一步,完成[快速开始](../quickstart.html)中的“本地安装npm包”的每一步。
Well also add the Jasmine package via `npm`:
然后我们通过npm添加Jasmine包
pre.prettyprint.lang-bash
code npm install jasmine-core --save-dev --save-exact
.alert.is-important
:marked
Be sure to install `jasmine-core` , not `jasmine`!
确认安装的是`jasmine-core`,不是`jasmine`
:marked
**Create a sub-folder `src` ** for our tests and then **cd into it**.
为我们的测试**新建一个子目录`src`**,然后**cd到里面**。
We are going to **display and control our tests in the browser**.
我们将会**在浏览器里面显示和控制我们的测试**。
.l-sub-section
:marked
The browser is nice during development of a few tests. Its not the best venue for working with a lot of tests and it wont do at all for build automation.
Well switch to the karma test-runner when the time comes. But the browser will do for now.
在我们开发一些测试的过程中,浏览器很有帮助。它却并不是最好的开发很多测试的地方,它更不能用来做建构自动化。
到时我们将会切换到Karma测试运行器。但是现在先用浏览器。
:marked
Create a new file called`unit-tests.html` and enter the following:
新建一个文件叫做`unit-tests.html`,并把下面的内容输入进去:
+makeExample('testing/ts/unit-tests-0.html', 'no-script', 'unit-tests.html')
:marked
In the head we have three Jasmine scripts and one Jasmine css file. Thats the foundation for running any tests.
在head里面我们有三个Jasmine脚本和一个Jasmine css文件。他们是运行任何测试的奠基石。
Well write our first test with inline JavaScript inside the body tag:
我们接下来以内嵌JavaScript的形式在body表示里面编写我们的第一个测试
+makeExample('testing/ts/unit-tests-0.html', 'body')(format='.')
:marked
Now open `unit-tests.html` in a browser and see the Jasmine HTML test output:
现在,在浏览器里打开`unit-tests.html`看到Jasmine HTML的测试结果
figure.image-display
img(src='/resources/images/devguide/jasmine-testing-101/jasmine-1-spec-0-failures.png' style="height:170px;" alt="Jasmine HTML test output")
:marked
It doesnt get much simpler than that!
这个已经是简单的不能再简单了。
.l-main-section
:marked
## First TypeScript Test
## 第一个TypeScript测试
Perhaps too simple. We wont write our entire test suite inside one HTML file.
Lets **extract** that line of test code to a **new file in `src` called `1st.spec.ts` ** .
或许过于简单。我们不会再一个HTML文件里面编写整套测试。让我们把这行测试代码**提取**到**`src`目录下的新文件`1st.spec.ts`**。
.l-sub-section
:marked
Among Jasmine developers, a test is known as a “spec” and test filenames include the word “spec”. Well stick with that convention.
在Jasmine开发者中一个测试通常被叫做“spec”而且测试的文件名包含单词“spec”。我们将遵循这个规则。
:marked
The test we wrote is valid TypeScript because any JavaScript is valid TypeScript. But lets make it more modern with an arrow function:
我们编写的测试是一个有效的TypeScript因为所有的JavaScript都是有效的TypeScript。但是让我们使用箭头函数让它更加现代
+makeExample('testing/ts/1st.spec.ts', 'it', '1st.spec.ts')
:marked
Now modify `unit-tests.html` to load the script:
现在修改`unit-tests.html`来加载上面的脚本:
+makeExample('testing/ts/unit-tests-1.html', 'script')
:marked
Hold on! We wrote a TypeScript file but were loading a JavaScript file?
等等我们编写了TypeScript文件但是我们却加载了一个Javascript文件
Thats a reminder that we need to compile our TypeScript test files as we do our TypeScript application files. Do that next.
这是一个提醒我们需要编译我们的TypeScript测试文件就像我们编译我们的TypeScript应用程序文件一样。我们接下来做这个。
.l-main-section
:marked
## Prepare for TypeScript
## 为TypeScript做准备
As weve seen before, we first have to tell the compiler how to compile our TypeScript files with
a ** `tsconfig.json` **.
和我们见过的一样,我们必须通过*`tsconfig.json`*告诉编译器怎么编译我们的TypeScript文件。
We can copy one from the quickstart we wrote previously and paste it into our src sub-folder.
It should look something like this:
我们可以从快速开始拷贝一个之前已写好的粘贴到我们的src子目录它应该像这样
+makeExample('testing/ts/tsconfig.1.json', null, 'tsconfig.json')
:marked
## Compile and Run
## 编译和运行
Compile in the terminal window using the npm script command
在终端窗口使用npm脚本命令编译
pre.prettyprint.lang-bash
code npm run tsc
.alert.is-helpful
:marked
Our editor and the compiler may complain that they dont know
what `it` and `expect` are because they lack the typing files that describe Jasmine.
We can ignore those annoying complaints for now as they are harmless.
我们的编辑器和编译器可能会抱怨,说他们不知道什么是`it`和`expect`因为他们缺少描述Jasmine的typing文件。我们暂时可以忽略这些讨厌的抱怨他们目前并无害处。
:marked
If we reload the browser, we should see the same Jasmine test-runner output as before.
如果我们刷新浏览器我们会看到和以前一样的Jasmine测试运行器输出。
Well be evolving these tests rapidly and it would be nice to have the browser refresh automatically as we make changes and recompile.
我们可以迅速进化这些测试,让浏览器在我们做出修改和重新编译时自动刷新的话就更方便了。
Lets launch with **live-server** in a second terminal window:
让我们在另一个终端窗口启动一个**live-server**。
pre.prettyprint.lang-bash
code npm start
:marked
Now reload `unit-tests.html` in the browser
现在在浏览器刷新`unit-tests.html`
We should get the same Jasmine test-runner output as before.
我们应该能看到一样的Jasmine测试运行器输出。
.l-main-section
:marked
## Add a describe and another test
## 添加一个describe和其他测试
We cant tell what file produced these test results. We only have one file at the moment but soon well write more.
我们不知道什么文件生成了这些测试结果。虽然我们目前只有一个文件但是我们会编写更多。
We should wrap this test into something that identifies the file. In Jasmine that “something” is a `describe` function.
Every test file should have at least one `describe` that identifies the file holding the test(s).
我们应该把这个测试包裹到一个可以识别这个文件的东西。在Jasmine里这个东西是一个`describe`函数。
每个测试文件都应该至少有一个`describe`来标识这个文件测试了什么。
Heres what our revised `1st.spec.ts` looks like when wrapped in a `describe`:
下面是我们修改`1st.spec.ts`,用`describe`包裹后的结果:
+makeExample('testing/ts/1st.spec.ts', 'describe')
:marked
And heres how the test report displays it.
下面是测试报告的显示:
figure.image-display
img(src='/resources/images/devguide/jasmine-testing-101/test-report-1-spec-0-failures.png' style="height:100px;" alt="1 spec, 0 failures")
:marked
Lets add another Jasmine test to `1st.spec.ts`
让我们添加另一个测试到`1st.spec.ts`
+makeExample('testing/ts/1st.spec.ts', 'another-test')(format=".")
:marked
You knew that right? Lets prove it with this test. The browser should refresh after you paste that test, and show:
你知道这个吧?让我们用这个测试来证明。浏览器应该在你粘贴那个测试后更新,然后显示:
figure.image-display
img(src='/resources/images/devguide/jasmine-testing-101/test-report-2-specs-0-failures.png' style="height:100px;" alt="refreshed 2 specs, 0 failures")
:marked
What does a failing test look like? Remove the `.not`. The browser refreshes and shows:
测试失败是什么样子?删除`.net`,刷新浏览器:
figure.image-display
img(src='/resources/images/devguide/jasmine-testing-101/test-report-2-specs-1-failure.png' style="height:190px;" alt="failing test 2 specs, 1 failure")
:marked
Click the `Spec List` link just below “2 specs, 1 failure” to see the summary again:
点击“2 Specs, 1 failure”下面的`Spec List`链接,看看总结:
figure.image-display
img(src='/resources/images/devguide/jasmine-testing-101/spec-list-2-specs-1-failure.png' style="height:140px;" alt="2 specs, 1 failure")
:marked
We can re-run just the failing test by double-clicking it. Try it!
我们可以只重新运行失败的测试,点击它就可以了。试试!
.l-main-section
:marked
## Debug the test
## 调试测试
Suppose we didnt know what was going on. We can debug it in the browser.
假设我们不知道是怎么回事。我们都能在浏览器里面调试它。
- Open the browsers “Developer Tools” (F12 or Ctrl-Shift-I).
- 打开浏览器的“开发者工具”F12或者Ctrl-Shift-I)
- Pick the “sources” section
- 选择"sources"标签
- Open the `1st.spec.ts` test file (Ctrl-P, then start typing the name of the file).
- 打开`1st.spec.ts`测试文件Ctrl-P, 然后开始输入文件名字)
- Set a breakpoint on the second line of the failing test
- 在失败的测试的第二行,设置一个断点
- Refresh the browser … and it stops at our breakpoint.
- 刷新浏览器...然后它停在我们的断点上
- Open the console window at the bottom (press Esc)
- 在底部打开console窗口按Esc键
- Type `null === undefined` … … and we should see this:
- 输入`null === undefined`...然后我们可以看到这个:
figure.image-display
img(src='/resources/images/devguide/jasmine-testing-101/null-to-equal-undefined.png' style="height:500px;" alt="null === undefined")
:marked
How about that! They really arent equal.
你觉得怎么样?它们真的不相等。
- remove the breakpoint (right-click in the “Breakpoints” section and chose “Remove breakpoint”)
- 移除断点在“Breakpoints”区域右键点击“Remove breakpoint”)
- Click the “play” icon to resume the test (or F8)
- 点击“play”图标来继续运行测试或F8
And the test finishes. Close the browser tools (click the close box or press F12 or Ctrl-Shift-I)
然后测试完成。关闭浏览器工具点击关闭图标或者按F12或Ctrl-Shift-I)
Fix the test (restore the `.not`); the browser should refresh automatically and all tests pass.
修复测试(恢复`.not`);浏览器应该自动刷新,所有测试都通过。
Congratulations … youve completed Jasmine testing 101.
恭喜...你完成了Jasmine测试101。
Now that were familiar with Jasmine on its own, were ready to test an application.
现在我们熟悉了Jasmine的独立运作我们已做好准备测试一个应用程序了。
<!-- TODO
.l-main-section
:marked
## Learn more
Learn more about basic Jasmine testing here
[Resources TBD](./#)
-->