首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >带另一个参数的Angular SpyOn服务

带另一个参数的Angular SpyOn服务
EN

Stack Overflow用户
提问于 2021-06-04 07:08:53
回答 2查看 102关注 0票数 1

如何使用另一个服务参数监视和锁定服务?例如,我的新Authservice具有以下参数:

代码语言:javascript
运行
复制
export class AuthService{
    constructor(public serviceAbcd: ServiceAbcd) {}

这是一个示例资源,在AuthService上没有构造函数参数。

https://codecraft.tv/courses/angular/unit-testing/mocks-and-spies/

代码语言:javascript
运行
复制
describe('Component: Login', () => {

  let component: LoginComponent;
  let service: AuthService;
  let spy: any;

  beforeEach(() => {
    service = new AuthService();
    component = new LoginComponent(service);
  });
    
  it('needsLogin returns true when the user has not been authenticated', () => {
    spy = spyOn(service, 'isAuthenticated').and.returnValue(false);
    expect(component.needsLogin()).toBeTruthy();
    expect(service.isAuthenticated).toHaveBeenCalled(); 
  });

  afterEach(() => { 
    service = null;
    component = null;
  });

});

我们正在尝试在没有测试床https://dev.to/angular/unit-testing-in-angular-to-testbed-or-not-to-testbed-3g3b的情况下进行测试

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-06-04 11:41:54

您可以使用angular的Testbed并注入服务

代码语言:javascript
运行
复制
import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing';

describe('Component: Login', () => {
  let service: AuthService;
  beforeEach(waitForAsync(() => {
    TestBed.configureTestingModule({
      imports: [
      ],
      declarations: [LoginComponent]
    })
      .compileComponents();
    service = Testbed.inject(AuthService);
  }));
  it('needsLogin returns true when the user has not been authenticated', () => {
    spy = spyOn(service, 'isAuthenticated').and.returnValue(false);
    expect(component.needsLogin()).toBeTruthy();
    expect(service.isAuthenticated).toHaveBeenCalled(); 
  });

  afterEach(() => { 
    service = null;
    component = null;
  });
}
票数 1
EN

Stack Overflow用户

发布于 2021-06-04 11:14:46

你能做service = new AuthService()吗?它不会抱怨它需要一个参数?

尝试执行以下操作:

代码语言:javascript
运行
复制
service = new AuthService({/* mock ServiceAbcd here */});
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67829672

复制
相关文章

相似问题

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