Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angular/32.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Angular 单元测试2服务_Angular_Unit Testing_Karma Jasmine - Fatal编程技术网

Angular 单元测试2服务

Angular 单元测试2服务,angular,unit-testing,karma-jasmine,Angular,Unit Testing,Karma Jasmine,我对Angular的整个单元测试场景还不熟悉,所以如果大家能给我指点方向,那就太好了。。我试图创建一个假服务并传回数据,我可以运行一些简单的测试 当我去运行测试时,它似乎失败了 服务器错误 在网页上:///~/rxjs/Subscriber.js:194:0测试双精度的目的 我知道进入单元测试的痛苦,在JavaScript和Angular中,我花了几次时间才意识到这一点 因此,我希望以下解释将有助于理清困惑: 您正在测试的对象称为“正在测试的对象” 在您的情况下,它是搜索服务 模拟是一种伪对象

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

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

服务器错误 在网页上:///~/rxjs/Subscriber.js:194:0测试双精度的目的 我知道进入单元测试的痛苦,在JavaScript和Angular中,我花了几次时间才意识到这一点

因此,我希望以下解释将有助于理清困惑:

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

在您的情况下,它是
搜索服务

模拟是一种伪对象

这些伪造的物品有很多不同的名称和用途——模仿、间谍、存根等等

但是Gerard Meszaros创造并解释的通用名称是测试双打

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

用双重测试替换对象的协作者是为了测试对象如何与其交互

想法是“记录”这种交互,它是通过间谍完成的(在Jasmine-
Jasmine.createSpy()

单元测试2服务 测试http调用的一种方法-

您没有义务使用
TestBed
来测试服务,它对于测试可重用组件更有用,因为它具有DOM功能

您可以创建一个伪对象,该对象具有与Angular的Http对象相同的方法,但替换为spies

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

然后调用测试中的REAL服务的方法,并调查相关间谍的结果

测试http调用的另一种方法 您可以使用
MockBackend
类并将Http服务配置为使用伪后端,如

关于你得到的错误 很难说没有看到一个例子中有真正的服务正在测试代码

更多理论材料(视频) 如果您是测试新手,您可以在我的(免费)理论课程中了解更多关于测试加倍和单元测试是如何完成的

希望有帮助。

双打测试的目的 我知道进入单元测试的痛苦,在JavaScript和Angular中,我花了几次时间才意识到这一点

因此,我希望以下解释将有助于理清困惑:

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

在您的情况下,它是
搜索服务

模拟是一种伪对象

这些伪造的物品有很多不同的名称和用途——模仿、间谍、存根等等

但是Gerard Meszaros创造并解释的通用名称是测试双打

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

用双重测试替换对象的协作者是为了测试对象如何与其交互

想法是“记录”这种交互,它是通过间谍完成的(在Jasmine-
Jasmine.createSpy()

单元测试2服务 测试http调用的一种方法-

您没有义务使用
TestBed
来测试服务,它对于测试可重用组件更有用,因为它具有DOM功能

您可以创建一个伪对象,该对象具有与Angular的Http对象相同的方法,但替换为spies

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

然后调用测试中的REAL服务的方法,并调查相关间谍的结果

测试http调用的另一种方法 您可以使用
MockBackend
类并将Http服务配置为使用伪后端,如

关于你得到的错误 很难说没有看到一个例子中有真正的服务正在测试代码

更多理论材料(视频) 如果您是测试新手,您可以在我的(免费)理论课程中了解更多关于测试加倍和单元测试是如何完成的


希望能有所帮助。

当您尝试测试一个假服务时,为什么要使用该服务?!理想情况下,当你删除他们应该练习的东西时,你应该编写仍然无法通过的测试。当你试图测试该服务时,为什么要使用假服务?!理想情况下,您应该编写在删除他们应该练习的内容时仍然无法通过的测试。
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);

        }
    );

});

});