我对整个单元测试场景都很陌生,所以如果大家能指点我的方向,那就太好了。我试图创建一个假服务并将数据传回给我,我可以运行一些简单的测试。
当我去运行测试时,它似乎失败了。
webpack的服务器错误:/~/rxjs/Subscriber.js:194:0 <- config/业力-test-shim.js:20301
我不认为这是我的webpack配置..。这是我的代码。
import { SearchModule } from './search.module';
import { SearchService } from './search.services';
import { HttpModule } from '@angular/http';
import { inject, TestBed } from '@angular/core/testing';
import { Observable } from 'rxjs/Observable';
import { BrowserDynamicTestingModule, platformBrowserDynamicTesting } from '@angular/platform-browser-dynamic/testing';
class SearchServiceMock {
search() {
return Observable.of(
[
{
"title": "title_1",
"artist": "artist_1",
"release": "06/02/2016",
"slug": "slug-1"
},
{
"title": "title_2",
"artist": "artist_1",
"release": " 27/01/2017",
"slug": "slug-2"
},
{
"title": "title_3",
"artist": "artist_3",
"release": "17/02/2017",
"slug": "slug-3"
}
]
)
}
}
describe('Service: TracksServices', () => {
let searchService: SearchService;
beforeEach(() => TestBed.configureTestingModule({
imports: [ SearchModule, HttpModule ],
providers: [
{ provide: SearchService, useClass: SearchServiceMock },
]
}));
beforeEach(inject([SearchService], (s: any) => {
searchService = s;
}));
it('Search results 3', () => {
searchService.search('track 1', 1, 4).subscribe(
(x:any) => {
// expect(x).toContain(track);
expect(x.length).toEqual(3);
}
);
});
});当我想使用假的服务时,测试似乎仍然在得到真正的服务。
发布于 2017-02-05 19:50:30
测试双打的目的
我知道进入单元测试的痛苦,无论是在JavaScript中还是在角度上,我花了几次试着把我的头绕在它周围。
,所以我希望下面的解释将有助于解决混乱:
您正在测试的对象称为“正在测试的对象”。
在您的例子中,它是SearchService。
假面具是一种假的物体。
这些假物品有很多不同的名称和用途-莫克斯,间谍,存根等。
但是由Gerard发明并解释过的这里的通用名称是测试双打。
被测试对象通常依赖于其他对象。这些依赖项也称为协作者。
用测试加倍替换对象的协作者是为了测试对象如何与它们交互。
其想法是“记录”这种互动,它是与间谍(在茉莉花- jasmine.createSpy())。
单元测试角2服务
测试http调用的一种方法-
您不必使用TestBed来测试服务,它对于测试可重用组件更为有用,因为它具有DOM能力。
您可以创建一个假对象,它具有与角的Http对象相同的方法,但被间谍所取代。
然后创建一个new SearchService(httpSpy)实例。这将给您一份服务副本,您可以对其进行测试。
然后调用被测试的真实服务的方法,并对相关间谍进行查询。
另一种测试http调用的方法----您可以使用MockBackend类并将Http服务配置为使用假后端,比如在这个医生里
关于你所犯的错误
很难说,如果不使用测试代码下的实际服务,很难看到示例中的柱塞。
更多理论资料(视频)
如果您是测试新手,您可以在我关于JavaScript单元测试与TDD的(免费)理论课程中了解更多关于测试双倍以及单元测试是如何完成的。
希望能帮上忙。
https://stackoverflow.com/questions/41730657
复制相似问题