【问题标题】:Angular testing stub returning variable times out test角度测试存根返回变量超时测试
【发布时间】:2017-11-22 07:16:24
【问题描述】:

所以我在单元测试中有一个服务存根,我需要更改不同测试的返回值。我尝试使用间谍来捕获并返回所需的值,但没有奏效。目前我有一个相关函数返回一个之前声明的变量,但是,这只会使每个测试超时,就好像永远不会返回一个值一样。

let schoolIn = false
const calandarServiceStub = {

  getSchedule(a) {
    return Promise.resolve()
  },
  // currentClass(a){
  //    return 'cu'
  // },
  next(a) {
    return 'nextu!'
  },
  convertTime(a, b) {
    return 650
  },
  isSchoolIn(a, b) {
    return schoolIn
  },
  needsInc(a, b) {
    return false
  },
  endsIn(a) {
    return 'endseen'
  }
}

还有错误

Error: Timeout - Async callback was not invoked within timeout specified by jasmine.DEFAULT_TIMEOUT_INTERVAL.
    at http://localhost:9876/base/node_modules/jasmine-core/lib/jasmine-core/jasmine.js?916005cc407925f4764668d61d04888d59258f5d:1973:23 [ProxyZone]
    at ProxyZoneSpec.Array.concat.ProxyZoneSpec.onInvokeTask (http://localhost:9876/base/src/test.ts?debf1c3289163cfbc2c419b8e0e217abd44684a5:79544:39) [ProxyZone]
    at ZoneDelegate.invokeTask (http://localhost:9876/base/src/polyfills.ts?165d95334de0fc3588419d6d62f0ed66f90a6ad5:1552:36) [ProxyZone]
    at Zone.runTask (http://localhost:9876/base/src/polyfills.ts?165d95334de0fc3588419d6d62f0ed66f90a6ad5:1320:47) [<root> => ProxyZone]
    at ZoneTask.invoke (http://localhost:9876/base/src/polyfills.ts?165d95334de0fc3588419d6d62f0ed66f90a6ad5:1615:38) [<root>]
    at timer (http://localhost:9876/base/src/polyfills.ts?165d95334de0fc3588419d6d62f0ed66f90a6ad5:2695:29) [<root>]

当我这样写时:

  isSchoolIn(a, b) {
    return true
  },

一切正常,除非我需要将该值设置为 false。

【问题讨论】:

    标签: javascript angular unit-testing


    【解决方案1】:

    试试这个:(calandarServiceStub.getSchedule as Spy).and.returnValue(Observable.of(true))

    Observable.of马上返回!

    这可以在每个必要的测试中完成,或者如果它适用于所有测试,则可以在 beforeEach 中完成

    更新

    我意识到我的回答不够充分。 所以我会努力做得更好:

    我会模拟提供程序中的调用。这样我就不用做存根了,直接用spy.and.callFake

    describe('Service', () => {
        beforeEach(() => {
        TestBed.configureTestingModule({
          providers: [
            {
              provide: calandarService,
              useValue: {
                getSchedule: _ => Observable.of(false),
              },
            },
          ],
        });
      });
    
      beforeEach(()=>{
        ...
      });
    

    });

    如果你想监视 al 元素,你仍然可以这样做:const spy =spyon(serivce,'getSchedule');`

    然后:expect(spy).toHaveBeenCalledTimes(1);

    【讨论】:

    • 所以这会出现在每个测试或部分的 beforeEach 中?
    • 两个都可以
    猜你喜欢
    • 1970-01-01
    • 2017-10-03
    • 1970-01-01
    • 2021-11-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-04-14
    • 1970-01-01
    相关资源
    最近更新 更多