导入 json 文件来模拟我的测试数据

Posted

技术标签:

【中文标题】导入 json 文件来模拟我的测试数据【英文标题】:Import json file to mock data for my tests 【发布时间】:2019-07-02 12:23:05 【问题描述】:

我尝试在我的 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 run test 可以工作,但应用程序无法编译,因为

src/app/mocks/services/UserServiceStub.ts(4,15) 中的错误:错误 TS2304:找不到名称“需要”。

我试过用

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

并使用以下方式导入模拟 json:

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

这破坏了我所有的导入,比如 momentJS(import * as moment from 'moment')

我读到我可以添加

"allowSyntheticDefaultImports": true

但这并没有帮助......

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

编辑:我忘了说 require 在我的规范文件中工作,当我在 /src/mocks/services/MyService.stub.ts 中使用它时它就失败了

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

【问题讨论】:

我认为你做错了。您需要使用模拟服务获取数据 我可以硬编码服务中的数据,但我想保持 DRY 我编辑了问题,要求在 .spec.ts 中工作,但不在存根中 【参考方案1】:

你可以有类似的东西:

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);
  
;

【讨论】:

是的,这解决了我的问题,所以我接受了答案。我只是希望我可以只使用 json 文件...谢谢(尽管我必须从构建中排除这些文件)

以上是关于导入 json 文件来模拟我的测试数据的主要内容,如果未能解决你的问题,请参考以下文章

模拟 API 响应时如何在单元测试中使用 JSON 文件

接口测试使用json-server mock模拟数据

在模拟API响应时,如何在单元测试中使用JSON文件

将 mongo 导入到 Azure Cosmos 模拟器时出现问题

在 UI 测试中将模拟数据插入 Core Data

多次使用相同的模拟对象/数组时,如何在没有引用问题的情况下导入模拟数据以进行测试