无法使用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); });

无法使用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注入构造函数仅当服务被注入到构造函数中,因此间谍没有模仿时才起作用

这里有问题吗?我无法模拟AppConstants中存在的无效\u NAME\u CHARS属性。它仍然指向原始值(使用测试中编写的console.log进行检查)

好的,我得到了答案。这有两个问题:

  • 无效的\u NAME\u CHARS不是一个函数,它是一个类变量,因此它不会返回任何内容。相反,我们必须执行一个
    appConstantsSpy.INVALID\u NAME\u CHARS='#xyz'
  • 我没有将AppConstants注入构造函数仅当服务被注入到构造函数中,因此间谍没有模仿时才起作用。事实上,我得到的是原始值本身。此外,console语句将返回原始值。我们需要执行
    console.log(appconstantspy.INVALID_NAME_CHARS)

  • 好的,我得到了答案。这有两个问题:

  • 无效的\u NAME\u CHARS不是一个函数,它是一个类变量,因此它不会返回任何内容。相反,我们必须执行一个
    appConstantsSpy.INVALID\u NAME\u CHARS='#xyz'
  • 我没有将AppConstants注入构造函数仅当服务被注入到构造函数中,因此间谍没有模仿时才起作用。事实上,我得到的是原始值本身。此外,console语句将返回原始值。我们需要执行
    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);
        });