javascript - 我如何模拟没有索引的键值对列表( Angular )?

标签 javascript java angular spring-boot jasmine

我正在使用 Jasmine 对一个 angular 应用程序进行单元测试,我参与其中。 该应用程序有一个用 Spring boot 编写的后端,它公开了一些 API。

从其中一个 API(GET 请求)收到的内容是一个映射键、值(对象、值)对列表

我想要的是模拟响应,使其看起来与下面(结果)相同。

Like this => [
                 key: value *//does not have an index*
             ]

Accessed like this => this.list = result['someList'];

例如,

constructor(private httpClient: HttpCLient) {}

ngOnInit() {
    this.getAll().subscribe(result => {
        this.someListInsideResult = result['someList'];
        console.log('result: ', result);
        console.log('someListInsideResult: ', someListInsideResult);
    }
}

getAll() {
    this.headers = new HttpHeaders().set('X-Authorization', 'Bearer  ' + token).set('X-Requested-With', 'XMLHttpRequest').set('Content-Type', 'application/json');
    return httpClient.get(url, {headers: headers});
}

控制台:

// actual respose(result)
result: [
            key1: value1
            key2: value2
            ...
            ...
            someList: 0: "stringValue"
                      1: "ENUM"
                      2: null
        ]

// list inside the response
someListInsideResult: 0: "stringValue"
                      1: "ENUM"
                      2: null

如果有人能提供帮助,将不胜感激。

提前致谢。

最佳答案

将 http 调用移至服务,比方说 UserService:

UserService.service.ts

export class UserService{

getAll(): Observable<any> {
   this.headers = new HttpHeaders().set('X-Authorization', 'Bearer  ' + token).set('X- 
      Requested-With', 'XMLHttpRequest').set('Content-Type', 'application/json');
   return httpClient.get(url, {headers: headers});
}
} 

在 Controller 中,注入(inject)服务并用作

User.component.ts

ngOnInit() {
    this.userSvc.getAll().subscribe(result => {
        this.someListInsideResult = result['someList'];
        console.log('result: ', result);
        console.log('someListInsideResult: ', someListInsideResult);
    }
}

然后为了测试创建一个模拟服务:

MockUserService.ts

export class MockUserService {

   getAll() {
    return of({
        key1: 'key1',
        someList : [{ "0" : "stringValue"}]
    })
   }

}

然后在 User.component.spec.ts

beforeEach(async(() => {
    TestBed.configureTestingModule({
        imports: [],
        declarations: [UserComponent],
        providers: [
          { provide: UserService, useClass: MockUserService }] // <-- Here we have injected our Mock
    }).compileComponents();
}));

关于javascript - 我如何模拟没有索引的键值对列表( Angular )?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54805497/

相关文章:

java - 使用 toString() 方法打印 String Array 对象的编号列表

javascript - 未处理的 promise 拒绝 : Zone. js 已检测到 ZoneAwarePromise `(window|global).Promise` 已被覆盖

Javascript 未定义错误但控制台日志显示值

javascript - 测试向下滚动按钮

javascript - 你能让 font-size 属性根据浏览器窗口缩放吗?

javascript - 有没有办法从您使用 .load() 加载的 htm 加载函数? jQuery

java - 从命令行编译 java 类时找不到符号错误

java - 使用观察者模式移动标签(JavaFx)

javascript - 使用 Angular2 TestBed 模拟具有非具体类接口(interface)参数的服务

javascript - 未捕获的 TypeError : this. getExtraNgModuleProviders 不是函数