translate: testing.jade line 1130

This commit is contained in:
Zhimin YE (Rex) 2016-09-23 11:40:36 +01:00
parent 8178d1abde
commit 77d7804b1e
1 changed files with 50 additions and 1 deletions

View File

@ -1001,7 +1001,7 @@ a#welcome-spec-setup
:marked :marked
Here's the complete, preferred `beforeEach`: Here's the complete, preferred `beforeEach`:
这里是完整的,首选的`beforeEach` 这里是完整的,推荐的`beforeEach`
+makeExample('testing/ts/app/welcome.component.spec.ts', 'setup', 'app/welcome.component.spec.ts')(format='.') +makeExample('testing/ts/app/welcome.component.spec.ts', 'setup', 'app/welcome.component.spec.ts')(format='.')
:marked :marked
下面是一些测试: 下面是一些测试:
@ -1025,59 +1025,108 @@ a(href="#top").to-top 回到顶部
a#component-with-async-service a#component-with-async-service
:marked :marked
# Test a component with an async service # Test a component with an async service
# 测试一个有异步服务的组件
Many services return values asynchronously. Many services return values asynchronously.
Most data services make an HTTP request to a remote server and the response is necessarily asynchronous. Most data services make an HTTP request to a remote server and the response is necessarily asynchronous.
许多服务异步返回值。大部分数据服务向远程服务器发起HTTP请求响应必然是异步的。
The "About" view in this sample displays Mark Twain quotes. The "About" view in this sample displays Mark Twain quotes.
The `TwainComponent` handles the display, delegating the server request to the `TwainService`. The `TwainComponent` handles the display, delegating the server request to the `TwainService`.
Both are in the `app/shared` folder because the author intends to display Twain quotes on other pages someday. Both are in the `app/shared` folder because the author intends to display Twain quotes on other pages someday.
Here is the `TwainComponent`. Here is the `TwainComponent`.
本例的`About`视图显示马克吐温的名言。
`TwainComponent`组件处理显示、委派`TwainService`向服务器发起请求。
两者都在`app/shared`目录里,因为作者计划将来在其他页面也显示马克吐温的名言。
下面是`TwainComponent`
+makeExample('testing/ts/app/shared/twain.component.ts', 'component', 'app/shared/twain.component.ts')(format='.') +makeExample('testing/ts/app/shared/twain.component.ts', 'component', 'app/shared/twain.component.ts')(format='.')
:marked :marked
The `TwainService` implementation is irrelevant at this point. The `TwainService` implementation is irrelevant at this point.
It is sufficient to see within `ngOnInit` that `twainService.getQuote` returns a promise which means it is asynchronous. It is sufficient to see within `ngOnInit` that `twainService.getQuote` returns a promise which means it is asynchronous.
`TwainService`的实现细节现在并不重要。
`ngOnInit`的`twainService.getQuote`返回一个承诺,所以显然它是异步的。
In general, tests should not make calls to remote servers. In general, tests should not make calls to remote servers.
They should fake such calls. The setup in this `app/shared/twain.component.spec.ts` shows one way to do that: They should fake such calls. The setup in this `app/shared/twain.component.spec.ts` shows one way to do that:
一般来讲,测试不应该向远程服务器发请求。
它们应该伪造这样的请求。`app/shared/twain.component.spec.ts`里的配置是其中一种伪造方法:
+makeExample('testing/ts/app/shared/twain.component.spec.ts', 'setup', 'app/shared/twain.component.spec.ts (setup)')(format='.') +makeExample('testing/ts/app/shared/twain.component.spec.ts', 'setup', 'app/shared/twain.component.spec.ts (setup)')(format='.')
a#service-spy a#service-spy
:marked :marked
### Spying on the real service ### Spying on the real service
### 刺探(Spy)真实服务
This setup is similar to the [`welcome.component.spec` setup](#welcome-spec-setup). This setup is similar to the [`welcome.component.spec` setup](#welcome-spec-setup).
But instead of creating a fake service object, it injects the _real_ service (see the test module `providers`) and But instead of creating a fake service object, it injects the _real_ service (see the test module `providers`) and
replaces the critical `getQuote` method with a Jasmine spy. replaces the critical `getQuote` method with a Jasmine spy.
本配置与[`welcome.component.spec` setup](#welcome-spec-setup)类似。
但是与其伪造一个服务对象,它注入了真实的服务(参见测试模块的`providers`并用一个Jasmine的`spy`替换关键的`getQuote`方法。
+makeExample('testing/ts/app/shared/twain.component.spec.ts', 'spy')(format='.') +makeExample('testing/ts/app/shared/twain.component.spec.ts', 'spy')(format='.')
:marked :marked
The spy is designed such that any call to `getQuote` receives an immediately resolved promise with a test quote. The spy is designed such that any call to `getQuote` receives an immediately resolved promise with a test quote.
The spy bypasses the actual `getQuote` method and therefore will not contact the server. The spy bypasses the actual `getQuote` method and therefore will not contact the server.
这个Spy的设计是所有调用`getQuote`的方法都会收到立刻解析的承诺得到一个预设的名言。Spy拦截了实际`getQuote`方法,所有它不会联系服务。
.l-sub-section .l-sub-section
:marked :marked
Faking a service instance and spying on the real service are _both_ great options. Faking a service instance and spying on the real service are _both_ great options.
Pick the one that seems easiest for the current test suite. Don't be afraid to change your mind. Pick the one that seems easiest for the current test suite. Don't be afraid to change your mind.
伪造一个服务实例和刺探真实服务都是好方法。挑选一个对当前测试套件最简单的方法。你可以随时改变主意。
:marked :marked
Here are the tests with commentary to follow: Here are the tests with commentary to follow:
下面是接下来带有注解的测试:
+makeExample('testing/ts/app/shared/twain.component.spec.ts', 'tests', 'app/shared/twain.component.spec.ts (tests)') +makeExample('testing/ts/app/shared/twain.component.spec.ts', 'tests', 'app/shared/twain.component.spec.ts (tests)')
:marked :marked
### Synchronous tests ### Synchronous tests
### 同步测试
The first two tests are synchronous. The first two tests are synchronous.
Neither test can prove that a value from the service will be displayed. Neither test can prove that a value from the service will be displayed.
前两个测试是同步的。它们都不能证明服务返回的值将会被显示。
Thanks to the spy, the second test verifies that `getQuote` is called. Thanks to the spy, the second test verifies that `getQuote` is called.
But the quote itself has not arrived, despite the fact that the spy returns a resolved promise. But the quote itself has not arrived, despite the fact that the spy returns a resolved promise.
在Spy的帮助下第二个测试验证了`getQuote`被调用了。
虽然Spy返回了一个解析了的承诺但是确没有收到名言。
This test must wait at least one full turn of the JavaScript engine, a least one "tick", before the This test must wait at least one full turn of the JavaScript engine, a least one "tick", before the
value becomes available. By that time, the test runner has moved on to the next test in the suite. value becomes available. By that time, the test runner has moved on to the next test in the suite.
这个测试必须等待JavaScript引擎一整个回合至少一个"tick"后,返回值才会有效。这个时候,测试运行器已经移到了测试套件下一个测试。
The test must become an "async test" ... like the third test The test must become an "async test" ... like the third test
测试必须变成一个“异步测试”...就像第三个测试那样。
a#async-fn-in-it a#async-fn-in-it
:marked :marked
## The _async_ function in _it_ ## The _async_ function in _it_
## **it**里的**async**函数方法
Notice the `async` in the third test. Notice the `async` in the third test.
注意第三个测试的`async`方法。
+makeExample('testing/ts/app/shared/twain.component.spec.ts', 'async-test', 'app/shared/twain.component.spec.ts (async test)')(format='.') +makeExample('testing/ts/app/shared/twain.component.spec.ts', 'async-test', 'app/shared/twain.component.spec.ts (async test)')(format='.')
:marked :marked
The `async` function is part of the _Angular TestBed_ feature set. The `async` function is part of the _Angular TestBed_ feature set.