angular - 导入 json 文件以模拟我的测试数据

标签 angular unit-testing jasmine

我尝试在 jasmine 测试中模拟数据。

在我使用的组件规范中:

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

我将一个服务 stub 放入 /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 run test 可以工作,但应用程序无法编译,因为

ERROR in src/app/mocks/services/UserServiceStub.ts(4,15): error TS2304: Cannot find name 'require'.

我试过修改 tsconfig.json

"compilerOptions": {
    "resolveJsonModule": true,
    "esModuleInterop": true  
  }

然后导入 mocks json:

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

这破坏了我所有的导入,比如 momentJS(从“moment”导入 * 作为 moment)

我读到我可以添加

"allowSyntheticDefaultImports": true

但这并没有帮助...

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

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

我将 stub 服务修改为一个类,并将提供程序更改为使用 useClass 而不是 useValue 但这没有帮助。

最佳答案

你可以有这样的东西:

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 中并将其导入到您的 stub 文件中,例如:

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

然后您的 stub 服务将如下所示:

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

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

关于angular - 导入 json 文件以模拟我的测试数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54589368/

相关文章:

java - 接口(interface)模拟工作不正常

javascript - jasmine.clock().tick() 不适用于 $timeout 和 debounce,但适用于 setTimeout

html - 如何将图像从 App 组件绑定(bind)到 Angular 2 中的 HTML 文件

jquery - 异步任务后执行Jquery

javascript - Angular 5 : How to inject Router service with ES6/ES5 (without Typescript)

javascript - 如何基于依赖于 specs jasmine 中其他函数的变量值运行函数?

jasmine - Protractor - 在 Chrome 上禁用 'harmful' 下载消息

angular - 如何将数据从 Angular 4 中的另一个组件加载到模态中?

c# - 在 C# 中,改进单元测试反馈循环的好方法是什么?

javascript - 如何在我的应用程序中测试我的 http 请求