无法使用spy模拟 从'services/validatsservice.ts'导入{validatsservice}; 从'app.constants'导入{AppConstants}; 从“服务/AlertsService”导入{AlertsService}; 从“@angular/core/testing”导入{TestBed}; fdescribe('验证器服务',函数()){ 让vs:ValidatorsService=null; 让appConstantsSpy:jasmine.SpyObj; 在每个之前(()=>{ console.log('Nitish'); const spy=jasmine.createSpyObj( 'AppConstants',['INVALID_NAME_CHARS']); TestBed.configureTestingModule({ 提供者:[验证器服务, 警报服务, {提供:AppConstants,useValue:spy}] }); vs=TestBed.get(ValidatorsService); appConstantsSpy=TestBed.get(AppConstants); AppConstantSpy.INVALID_NAME_CHARS.and.returnValue('#xyz'); }); 描述('验证器服务',()=>{ 它('应正确验证实体名称',()=>{ expect(vs.isValidEntityName('b')).toBe(true); expect(vs.isValidEntityName('b')).toBe(true); expect(vs.isValidEntityName('b')).toBe(true); expect(vs.isValidEntityName('bd')).toBe(true); console.log(AppConstants.INVALID_NAME_CHARS); expect(vs.isValidEntityName(“”)).toBe(false); expect(vs.isValidEntityName(“”)).toBe(false); expect(vs.isValidEntityName('x')).toBe(false); expect(vs.isValidEntityName('y')).toBe(false); expect(vs.isValidityName('bx')).toBe(false); });
这里有问题吗?我无法模拟AppConstants中存在的无效\u NAME\u CHARS属性。它仍然指向原始值(使用测试中编写的console.log进行检查)好的,我得到了答案。这有两个问题:无法使用spy模拟 从'services/validatsservice.ts'导入{validatsservice}; 从'app.constants'导入{AppConstants}; 从“服务/AlertsService”导入{AlertsService}; 从“@angular/core/testing”导入{TestBed}; fdescribe('验证器服务',函数()){ 让vs:ValidatorsService=null; 让appConstantsSpy:jasmine.SpyObj; 在每个之前(()=>{ console.log('Nitish'); const spy=jasmine.createSpyObj( 'AppConstants',['INVALID_NAME_CHARS']); TestBed.configureTestingModule({ 提供者:[验证器服务, 警报服务, {提供:AppConstants,useValue:spy}] }); vs=TestBed.get(ValidatorsService); appConstantsSpy=TestBed.get(AppConstants); AppConstantSpy.INVALID_NAME_CHARS.and.returnValue('#xyz'); }); 描述('验证器服务',()=>{ 它('应正确验证实体名称',()=>{ expect(vs.isValidEntityName('b')).toBe(true); expect(vs.isValidEntityName('b')).toBe(true); expect(vs.isValidEntityName('b')).toBe(true); expect(vs.isValidEntityName('bd')).toBe(true); console.log(AppConstants.INVALID_NAME_CHARS); expect(vs.isValidEntityName(“”)).toBe(false); expect(vs.isValidEntityName(“”)).toBe(false); expect(vs.isValidEntityName('x')).toBe(false); expect(vs.isValidEntityName('y')).toBe(false); expect(vs.isValidityName('bx')).toBe(false); });,angular,Angular,这里有问题吗?我无法模拟AppConstants中存在的无效\u NAME\u CHARS属性。它仍然指向原始值(使用测试中编写的console.log进行检查)好的,我得到了答案。这有两个问题: 无效的\u NAME\u CHARS不是一个函数,它是一个类变量,因此它不会返回任何内容。相反,我们必须执行一个appConstantsSpy.INVALID\u NAME\u CHARS='#xyz' 我没有将AppConstants注入构造函数仅当服务被注入到构造函数中,因此间谍没有模仿时才起作用
appConstantsSpy.INVALID\u NAME\u CHARS='#xyz'
console.log(appconstantspy.INVALID_NAME_CHARS)
好的,我得到了答案。这有两个问题:
appConstantsSpy.INVALID\u NAME\u CHARS='#xyz'
console.log(appconstantspy.INVALID_NAME_CHARS)
您可以添加组件代码吗?是否将
AppConstants
注入ValidatorsService
?这是一个问题。AppConstants没有注入构造函数,而是使用了它的新实例。您可以添加组件代码吗?是否将AppConstants
注入ValidatorsService代码>?这是一个问题。AppConstants没有被注入到构造函数中,而是使用它的新实例。
import { ValidatorsService } from 'services/ValidatorsService.ts';
import { AppConstants } from 'app.constants';
import { AlertsService } from 'services/AlertsService';
import { TestBed } from '@angular/core/testing';
fdescribe('Validators service', function() {
let vs: ValidatorsService = null;
let appConstantsSpy: jasmine.SpyObj<AppConstants>;
beforeEach(() => {
console.log('Nitish');
const spy = jasmine.createSpyObj(
'AppConstants', ['INVALID_NAME_CHARS']);
TestBed.configureTestingModule({
providers: [ValidatorsService,
AlertsService,
{provide: AppConstants, useValue: spy}]
});
vs = TestBed.get(ValidatorsService);
appConstantsSpy = TestBed.get(AppConstants);
appConstantsSpy.INVALID_NAME_CHARS.and.returnValue('#xyz');
});
describe('validators service', () => {
it('should correctly validate entity names', () => {
expect(vs.isValidEntityName('b')).toBe(true);
expect(vs.isValidEntityName('b ')).toBe(true);
expect(vs.isValidEntityName(' b')).toBe(true);
expect(vs.isValidEntityName('bd')).toBe(true);
console.log(AppConstants.INVALID_NAME_CHARS);
expect(vs.isValidEntityName('')).toBe(false);
expect(vs.isValidEntityName(' ')).toBe(false);
expect(vs.isValidEntityName('x')).toBe(false);
expect(vs.isValidEntityName('y')).toBe(false);
expect(vs.isValidEntityName('bx')).toBe(false);
});