gyc*_*gyc 5 unit-testing jasmine angular
我尝试在茉莉花测试中模拟数据。
在我使用的组件规范中:
describe('MyComponent', () => {
  const user: User = require('../../mocks/user.json');
Run Code Online (Sandbox Code Playgroud)
我把一个服务存根放在/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);
  }
};
Run Code Online (Sandbox Code Playgroud)
有了这个npm run 测试,但应用程序无法编译,因为
src/app/mocks/services/UserServiceStub.ts(4,15) 中的错误:错误 TS2304:找不到名称“需要”。
我试着修改tsconfig.json与
"compilerOptions": {
    "resolveJsonModule": true,
    "esModuleInterop": true  
  }
Run Code Online (Sandbox Code Playgroud)
并使用以下命令导入模拟 json:
import * as users from '../../mocks/users.json';
Run Code Online (Sandbox Code Playgroud)
这破坏了我所有的导入,如 momentJS (import * as moment from 'moment')
我读到我可以添加
"allowSyntheticDefaultImports": true
Run Code Online (Sandbox Code Playgroud)
但这并没有帮助...
在我的测试中导入 json 文件的正确方法是什么?
编辑:我忘了说require在我的规范文件中工作,当我在/src/mocks/services/MyService.stub.ts 中使用它时它会失败
我将存根服务修改为一个类并将提供程序更改为使用useClass而不是useValue但这没有帮助。
你可以有类似的东西:
export const USER_OBJECTS: User[] = [
    {
        'firstName': 'Ana',
        'lastName': '..',
        'fullName': '..',
        'userName': '..',
        'email': '...'
    } as User,
    {
        'firstName': 'Lisa',
        'lastName': '..',
        'fullName': '..',
        'userName': '...',
        'email': '...'
    } as User
];
Run Code Online (Sandbox Code Playgroud)
在您的mocks/users.json.ts存根文件中并将其导入,例如:
import {USERS_OBJECTS} from '../mocks/users.json.ts';
Run Code Online (Sandbox Code Playgroud)
那么你的存根服务将如下所示:
export const MyServiceStub =  {
  users: require('../../mocks/users.json'),
  getUsers(): Observable<User[]> {
    return of(USER_OBJECTS);
  }
};
Run Code Online (Sandbox Code Playgroud)