导入json文件以模拟测试数据

时间:2019-02-08 09:29:56

标签: angular unit-testing jasmine

我尝试在茉莉花测试中模拟数据。

在组件规格中,我使用:

describe('MyComponent', () => {
  const user: User = require('../../mocks/user.json');

我放在 /src/mocks/services/service.stub.ts

中的服务存根
import { Observable, of } from 'rxjs';

export const MyServiceStub =  {
  users: require('../../mocks/users.json'),

  getUsers(): Observable<any> {
    return of(this.users);
  }
};

使用此 npm运行测试可以运行,但是由于以下原因,该应用无法编译

  src / app / mocks / services / UserServiceStub.ts(4,15)中的

ERROR:错误   TS2304:找不到名称“ require”。

我尝试用

修改 tsconfig.json
"compilerOptions": {
    "resolveJsonModule": true,
    "esModuleInterop": true  
  }

并使用以下命令导入模拟json:

import * as users from '../../mocks/users.json';

这破坏了我所有的进口,例如momentJS(从*'moment'开始的进口*)

我读到我可以添加

"allowSyntheticDefaultImports": true

但这没有帮助...

在测试中导入json文件的正确方法是什么?

编辑:我忘了说 require 在我的规格文件中有效,当我在 /src/mocks/services/MyService.stub.ts

我将存根服务修改为一个类,并更改了提供程序以使用 useClass 而不是 useValue ,但这无济于事。

1 个答案:

答案 0 :(得分:2)

您可以拥有类似的内容:

export const USER_OBJECTS: User[] = [
    {
        'firstName': 'Ana',
        'lastName': '..',
        'fullName': '..',
        'userName': '..',
        'email': '...'
    } as User,
    {
        'firstName': 'Lisa',
        'lastName': '..',
        'fullName': '..',
        'userName': '...',
        'email': '...'
    } as User
];

在您的mocks/users.json.ts中,并将其导入到您的存根文件中,例如:

import {USERS_OBJECTS} from '../mocks/users.json.ts';

然后您的存根服务如下:

export const MyServiceStub =  {
  users: require('../../mocks/users.json'),

  getUsers(): Observable<User[]> {
    return of(USER_OBJECTS);
  }
};