【发布时间】: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 中工作,但不在存根中
标签: angular unit-testing jasmine