无法解析 Class: (?) 的所有参数,尽管已提供
Posted
技术标签:
【中文标题】无法解析 Class: (?) 的所有参数,尽管已提供【英文标题】:Can't resolve all parameters for Class: (?) although it has been provided 【发布时间】:2018-11-29 18:22:58 【问题描述】:我目前正在为使用ngxs 进行状态管理的服务编写一些测试用例。我似乎无法弄清楚下面的代码有什么问题:
// auth.service.ts
@Injectable(
providedIn: 'root'
)
export class AuthService
@Select(SessionState) session$;
constructor(private http: HttpClient, private store: Store)
// session.state.ts
export interface SessionStateModel
user: User | null;
token: string | null;
state: 'authenticated' | 'guest' | 'invalid.credentials' | 'error' | 'pending';
response?: HttpErrorResponse | string | any;
export const defaultSessionState: SessionStateModel =
user: null,
token: null,
state: 'guest',
response: null
;
@State<SessionStateModel>(
name: 'session',
defaults: defaultSessionState
)
export class SessionState
constructor(private auth: AuthService)
// session.state.spec.ts
describe('should handle login, logout and errors properly', () =>
let store: Store;
let backend: HttpTestingController;
beforeEach(() =>
TestBed.configureTestingModule(
imports: [
HttpClientTestingModule,
NgxsModule.forRoot([SessionState])
],
providers: [
AuthService
]
);
backend = TestBed.get(HttpTestingController);
store = TestBed.get(Store);
);
afterEach(() =>
// After every test, assert that there are no more pending requests.
backend.verify();
);
it('should handle successful login', () =>
// oversimplified...
expect(true).toBe(true);
);
);
当我使用ng test
运行此程序时,业力返回以下异常:
Error: Can't resolve all parameters for SessionState: (?).
这对我来说没有任何意义,因为我已经是 providing
TestBed.configureTestingModule
中的 SessionState
(即 AuthService
)所必需的。我似乎无法弄清楚我在这里错过了什么?
【问题讨论】:
【参考方案1】:在给出这个答案的时候,如果状态类注入了依赖项,ngxs 不能与 Ivy 一起使用(但请参阅下面的编辑)。您可以通过在tsconfig.json
中设置以下编译器选项来关闭 Ivy:
"angularCompilerOptions":
"enableIvy": false
编辑: Ngxs 为 Ivy 提供了一个migration guide。按照本指南,除了 @State
装饰器之外,您还需要添加 @Injectable
装饰器:
@State<SessionStateModel>(
name: 'session',
defaults: defaultSessionState
)
@Injectable()
export class SessionState
constructor(private auth: AuthService)
【讨论】:
感谢您的回答。在我提出问题时,我没有使用 Ivy,但是当我升级到 9 时会记住它! :)【参考方案2】:您可能缺少@Injectable()
的SessionState
服务。这也可能引发错误。
@Injectable()
export class SessionState
constructor(private auth: AuthService)
【讨论】:
我最初也是这样,但事实并非如此。问题是AuthService
没有被注入到 SessionState
类中 - 而不是相反,AuthService
有一个 Injectable
装饰器。以上是关于无法解析 Class: (?) 的所有参数,尽管已提供的主要内容,如果未能解决你的问题,请参考以下文章
无法获得 Angular CLI 版本,尽管所有要求都已安装?
无法解析 xyz 的所有参数:(?, ?) 自 Angular2 CLI 升级以来
cx_Oracle 无法在 Python 3.9 中导入,尽管一切都已正确路径并且所有必需的部分都在 64 位上运行
尽管已安装,但无法在 .py 脚本中导入 plotly.express