首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >单元测试角2服务

单元测试角2服务
EN

Stack Overflow用户
提问于 2017-01-18 22:32:27
回答 1查看 1.2K关注 0票数 1

我对整个单元测试场景都很陌生,所以如果大家能指点我的方向,那就太好了。我试图创建一个假服务并将数据传回给我,我可以运行一些简单的测试。

当我去运行测试时,它似乎失败了。

webpack的服务器错误:/~/rxjs/Subscriber.js:194:0 <- config/业力-test-shim.js:20301

我不认为这是我的webpack配置..。这是我的代码。

代码语言:javascript
复制
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);

        }
    );

});

});

当我想使用假的服务时,测试似乎仍然在得到真正的服务。

EN

回答 1

Stack Overflow用户

发布于 2017-02-05 19:50:30

测试双打的目的

我知道进入单元测试的痛苦,无论是在JavaScript中还是在角度上,我花了几次试着把我的头绕在它周围。

,所以我希望下面的解释将有助于解决混乱:

您正在测试的对象称为“正在测试的对象”。

在您的例子中,它是SearchService

假面具是一种假的物体。

这些假物品有很多不同的名称和用途-莫克斯,间谍,存根等。

但是由Gerard发明并解释过的这里的通用名称是测试双打

被测试对象通常依赖于其他对象。这些依赖项也称为协作者

用测试加倍替换对象的协作者是为了测试对象如何与它们交互。

其想法是“记录”这种互动,它是与间谍(在茉莉花- jasmine.createSpy())。

单元测试角2服务

测试http调用的一种方法-

您不必使用TestBed来测试服务,它对于测试可重用组件更为有用,因为它具有DOM能力。

您可以创建一个假对象,它具有与角的Http对象相同的方法,但被间谍所取代。

然后创建一个new SearchService(httpSpy)实例。这将给您一份服务副本,您可以对其进行测试。

然后调用被测试的真实服务的方法,并对相关间谍进行查询。

另一种测试http调用的方法----您可以使用MockBackend类并将Http服务配置为使用假后端,比如在这个医生里

关于你所犯的错误

很难说,如果不使用测试代码下的实际服务,很难看到示例中的柱塞。

更多理论资料(视频)

如果您是测试新手,您可以在我关于JavaScript单元测试与TDD的(免费)理论课程中了解更多关于测试双倍以及单元测试是如何完成的。

希望能帮上忙。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41730657

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档