我在Angular 12中运行ng测试时遇到以下问题:
NullInjectorError:R3Injector错误(DynamicTestModule)[BaseURL-
错误:未定义应为true。位于UserContext。(http://localhost:9876/karma_webpack/webpack:/src/app/menu/menu.component.spec.ts:46:23)ZoneDelegate。调用(http://localhost:9876/karma_webpack/webpack:/node_modules/zone.js/fesm2015/zone.js:372:1)位于ProxyZoneSpec。onInvoke(调用)(http://localhost:9876/karma_webpack/webpack:/node_modules/zone.js/fesm2015/zone-testing.js:287:1)
规格的代码是:
import { ComponentFixture, TestBed } from '@angular/core/testing';
import { MenuComponent } from './menu.component';
import { DishService } from '../services/dish.service';
describe('MenuComponent', () => {
let component: MenuComponent;
let fixture: ComponentFixture<MenuComponent>;
const mockDishService = {
getDishes: () => {
return {
id: '000',
name: 'nnnnn'
}
}
}
beforeEach(async () => {
await TestBed.configureTestingModule({
imports: [],
declarations: [ MenuComponent ],
providers: [
{ provide: DishService, useValue: mockDishService },
]
})
.compileComponents();
});
beforeEach(() => {
fixture = TestBed.createComponent(MenuComponent);
component = fixture.componentInstance;
fixture.detectChanges();
});
it('should create', () => {
expect(component).toBeTruthy();
});
});
该组件的代码为:
import { Component, OnInit, Inject } from '@angular/core';
import { Dish } from '../shared/dish';
import { DishService } from '../services/dish.service';
import { flyInOut, expand } from '../animations/app.animation';
@Component({
selector: 'app-menu',
templateUrl: './menu.component.html',
styleUrls: ['./menu.component.scss'],
// tslint:disable-next-line:use-host-property-decorator
host: {
'[@flyInOut]': 'true',
'style': 'display: block;'
},
animations: [
flyInOut(),
expand()
]
})
export class MenuComponent implements OnInit {
dishes!: Dish[];
errMess: string;
constructor(private dishService: DishService,
@Inject ('BaseURL') public baseURL) { }
ngOnInit(): void {
this.dishService.getDishes().subscribe((dishes => this.dishes = dishes), errMess => this.errMess = <any>errMess);
}
}
我使用baseURL来获取数据库的信息。运行json服务器时的json文件--观察数据库。json来模拟我从服务器获取信息,所以我有一个名为baseurl的共享.ts文件。ts具有以下代码:
export const baseURL = 'http://localhost:3000';
在app.module.ts中,我导入了常量
import { baseURL } from './shared/baseurl';
我将其添加为同一app.module中的提供者。ts文件:
providers: [
{ provide: 'BaseURL', useValue: baseURL }
],
我将感谢有人在这个错误上的帮助
问题1:空注入器错误
此错误消息显示为您的DishComponent
需要注入BaseURL [@Inject(“BaseURL”)
]。
NullInjectorError:R3Injector错误(DynamicTestModule)[BaseURL-
问题 1 的解决方案
确保在单元测试的< code>providers部分中添加了< code>BaseURL。
const baseUrl = "your Base URL";
beforeEach(async () => {
await TestBed.configureTestingModule({
...
providers: [
{ provide: DishService, useValue: mockDishService },
{ provide: 'BaseURL', useValue: baseUrl },
]
})
.compileComponents();
});
问题 2:为 mockDishService.getDishes()
返回错误的值
从 MenuComponent
中,预计 dishService.getDishes()
返回 Observable 的值
dishes!: Dish[];
this.dishService.getDishes().subscribe((dishes => this.dishes = dishes), errMess => this.errMess = <any>errMess);
而< code > mockdishservice . get disks()
返回< code>any或< code>Menu类型的值,返回的数据不匹配。
const mockDishService = {
getDishes: () => {
return {
id: '000',
name: 'nnnnn',
};
},
};
因此,您将收到如下错误消息:
TypeError:this.dishService.get菜(…)。订阅不是一个函数
问题2的解决方案:
确保< code > mockdishservice . get disks()返回< code>Observable的值
import { of } from 'rxjs';
const mockDishService = {
getDishes: () => {
return of([
{
id: '000',
name: 'nnnnn',
},
]);
},
};
StackBlitz上的示例解决方案
当我尝试运行一个简单的JUnit 5测试(eclipse)时,我遇到了以下错误: 这是我的: 我尝试过类似问题的一些建议,比如这个github问题和其他问题,但是没有成功。我还在学习JUnit,所以我可能会忘记一些显而易见的东西。
如果在测试时自动连接它工作得很好,但如果自动连接则会得到 这是的工作测试: 这是一个与仅有的区别: org.springframework.beans.factory.unsatisfieddependencyException:创建名为“it.euphoria.data.service.CustomerRepositoryTest”的bean时出错:通过字段“Customer Service”表
问题内容: 我正在使用mocha-phantomjs设置进行单元测试。我有以下package.json脚本来运行测试。 在浏览器中可以正常运行。当我在cmd中运行命令时,测试运行正常,但同时也会出现以下错误 请任何人告诉我如何解决此错误。 问题答案: 当我在cmd中运行命令npm test时,测试运行正常 不,他们不是。您有6个失败的测试。的退出代码等于测试失败的次数。直接运行,看看有什么问题。意
我试图测试一个基于Spring引导的Restendpoint。代码能够返回预期的输出,但测试失败,错误如下: 已解析[org.springframework.http.converter.HttpMessageNotWritableException:预设内容类型为“null”的[class java.util.LinkedList]没有转换器 对此有任何想法都将不胜感激! 下面是相同的代码: 控
问题内容: 到目前为止,我有两个测试。一个仅使用jUnit框架即可正常工作。另一个使用spring-test库并在每次尝试运行该异常时创建此异常。有什么想法可能导致问题吗? Error Maven test dependencies Dependency tree 问题答案: 你是否正在使用旧版本的Eclipse(Galileo或更低版本)?还是旧版的junit插件?如果是这样,则可能是问题的原因
原关闭原因未解决 这是我的测试类,它的方法使用NullPointer失败。 正如您所看到的,我甚至尝试在方法中正确初始化时钟,但仍然失败。当我启动应用程序时,它按预期工作。 这是时钟豆 这是个例外 java.lang.NullPointerException:时钟