首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >测试Angular 2中的服务时,NgModule 'DynamicTestModule‘的提供程序无效

测试Angular 2中的服务时,NgModule 'DynamicTestModule‘的提供程序无效
EN

Stack Overflow用户
提问于 2017-02-01 20:46:13
回答 3查看 19.1K关注 0票数 24

我有以下服务:

代码语言:javascript
复制
import { Injectable } from '@angular/core';

import { MenuItem } from './../classes/menu-item';
import { ITEMS } from './../static-data/items-list';

@Injectable()
export class ItemsListService {

    getItems(): Promise<MenuItem[]> {
        return Promise.resolve(ITEMS);
    }

}

此服务的测试如下所示:

代码语言:javascript
复制
import { TestBed, async, inject } from '@angular/core/testing';

import { ItemListService } from './item-list.service';
import { MenuItem } from './../classes/menu-item';
import { ITEMS } from './../static-data/items-list';

describe('ItemListService', () => {
  beforeEach(() => {
    TestBed.configureTestingModule({
        providers: [ ItemListService, MenuItem, ITEMS ]
    });
  });

  it('should ...', inject([ItemListService], (service: ItemListService) => {
    expect(service).toBeTruthy();
  }));
});

MenuItem的定义如下:

代码语言:javascript
复制
export class MenuItem {
    name: string;
    link: string;
}

ITEMS在这里定义:从‘././classes/menu-item’导入{ MenuItem };

代码语言:javascript
复制
export var ITEMS: MenuItem[] = [
    {name: 'Vehicles', link: '/vehicles'},
    {name: 'Gateways', link: '/gateways'},
    {name: 'Statuses', link: '/statuses'},
    {name: 'Logs', link: '/logs'}
]

当我运行测试时,我在浏览器控制台中看到以下错误:

代码语言:javascript
复制
FAILED ItemListService should ...

那么为什么我会有这些错误呢?测试工作的解决方案是什么?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2017-11-18 10:54:39

这是一个令人讨厌的错误,我想我会在你的规范中包含另一个微妙的原因。在我的示例中,我指定了providers 而不是 provide的正确值,如下所示

代码语言:javascript
复制
 TestBed.configureTestingModule({
      providers: [{provider: ApplicationActions, useClass: ActionMock}]

而不是提供有用的信息,比如“不提供指定的关键字”,它只是报告

失败:对象'DynamicTestModule‘的提供程序无效-仅允许提供程序和类型的实例,got:[?object Object?,...]

票数 85
EN

Stack Overflow用户

发布于 2021-08-25 22:54:37

在我的例子中,我的一个提供程序行中有一个乱七八糟的逗号,导致DynamicTestModule认为我传递了undefined定义。

代码语言:javascript
复制
        {
          provide: ApiService,
          useValue: {
            getUsers: jasmine
              .createSpy('getUsers')
              .and.returnValue(of({ status: 200, body: [] })),
          },
        },
        , // whoops!
        MessageService,
        { provide: Location, useValue: { back: jasmine.createSpy('back') } },
票数 0
EN

Stack Overflow用户

发布于 2021-06-11 18:42:25

在导入我的Ionic Framework项目时,我也遇到了同样的问题:

代码语言:javascript
复制
import {Device} from '@ionic-native/device'

而不是:

代码语言:javascript
复制
import {Device} from '@ionic-native/device/ngx'
票数 -2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41980219

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档