我尝试在 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/