NodeJS 贾斯敏以为有间谍,但却有个活动

6pp0gazn  于 2023-02-18  发布在  Node.js
关注(0)|答案(2)|浏览(105)

我坚持固执地放弃,并为一些看起来如此简单,应该开箱即用的东西找到一个变通办法...
我正在处理一个使用Node环境的Jasmine测试套件,它无法监视一个明确存在/提供/导入的对象。
我想是关于模块解析和可写属性...
有人能给我指一下正确的方向吗?
不管怎样:使用Angular和测试床之类的东西我从来没有遇到过间谍的问题,他们的工作就像......他们是开箱即用的。
注:

  • 使用prototype来监视未修复:* spyOn(客户端.原型,'克隆').和. callThrough();*
  • 如下图所示,不会覆盖任何内容。

下面是一个简化的实现来演示。

    • 索引. js**:'
let state = null;

const templates = { obj: { a:1, b:2} },
    init = () => state = clone(templates.obj),
    clone = (obj) => JSON.parse(JSON.stringify(obj));

export {
    init,
    clone
}`
    • 索引规范js**:'
import * as client from '../../index.js';

describe("test", () => {
    it("should spy on the clone method", () => {
        console.log(Object.getOwnPropertyDescriptors(client));
        spyOn(client, 'clone').and.callThrough();
        client.init();
        expect(client.clone).toHaveBeenCalled();
    });
})`
    • 试验结果**:'
> client@1.0.0 test
> jasmine

Randomized with seed 24629
Started
client.clone:  [Function: clone]
{
  clone: {
    value: [Function: clone],
    writable: true,
    enumerable: true,
    configurable: false
  },
  init: {
    value: [Function: init],
    writable: true,
    enumerable: true,
    configurable: false
  },
  [Symbol(Symbol.toStringTag)]: {
    value: 'Module',
    writable: false,
    enumerable: false,
    configurable: false
  }
}
F

Failures:
1) test should spy on the clone method
  Message:
    Error: <toHaveBeenCalled> : Expected a spy, but got Function.
    Usage: expect(<spyObj>).toHaveBeenCalled()`
3mpgtkmj

3mpgtkmj1#

从'../../index.js'导入 * 作为导入模块;

const client = Object.assign({}, importedModule);

describe("test", () => {
    it("should spy on the clone method", () => {
        spyOn(client, 'clone').and.callThrough();
        client.clone({a:1,b:2});
        expect(client.clone).toHaveBeenCalled();
    });
})

test result:
client@1.0.0 test
jasmine

Randomized with seed 17205
Started
.

1 spec, 0 failures
Finished in 0.007 seconds
Randomized with seed 17205 (jasmine --random=true --seed=17205)
brtdzjyr

brtdzjyr2#

index.js

let state = null;

const templates = { obj: { a:1, b:2} },
    init = () => state = clone(templates.obj),
    clone = (obj) => JSON.parse(JSON.stringify(obj));

export {
    init,
    clone
}

index.spec.js

import * as client from '../../index.js';
describe("test", () => {
    it("should spy on the clone method", () => {
        spyOn(client, 'clone').and.callThrough();
        client.clone({a:1,b:2});
        expect(client.clone).toHaveBeenCalled();
    });
});

测试结果客户端@1.0.0测试jasmine
随机分配种子76297开始F
失败:1.测试应监视克隆方法消息:错误::应为spy,但获得的是函数。用法:expect().toHaveBeenCalled()堆栈:位于用户上下文中。(文件:///主页/主琼斯/项目/测试/规范/支持/索引.规范. js:7:30)位于

相关问题