装饰好的 engine 调用 setup options:
![](https://img.haomeiwen.com/i2085791/83c4aa7d88b8abbc.png)
![](https://img.haomeiwen.com/i2085791/6b904afeb499c018.png)
![](https://img.haomeiwen.com/i2085791/ee5c981d1701d36f.png)
engine 指的是下图这段绿色代码:
![](https://img.haomeiwen.com/i2085791/7ef0089e812f97cf.png)
现在准备执行下面这段代码了:
![](https://img.haomeiwen.com/i2085791/fe44320590374d9f.png)
准备调用被 mock 过的 engine 函数:
![](https://img.haomeiwen.com/i2085791/a055ec0c438e082e.png)
即下图 1 的函数:
![](https://img.haomeiwen.com/i2085791/032d905949940c54.png)
只要 spy 被调用,其调用时传入的参数,必定可以被记录:
![](https://img.haomeiwen.com/i2085791/5eac7e41510f44d6.png)
看这段代码:
![](https://img.haomeiwen.com/i2085791/124b26a722f8af5c.png)
jasmine.objectContaining 的适用场合:
jasmine.objectContaining 用于那些期望只关心实际中的某些键/值对的时候。
把这段代码改造一下:
it(`should pass setup options to the original engine`, () => {
const jerry = jasmine.arrayContaining([
{ provide: 'testToken', useValue: 'testValue' },
]);
expect(originalEngine).toHaveBeenCalledWith(
jasmine.objectContaining({
bootstrap: 'TestModule',
providers: jerry
})
);
});
jasmine.objectContaining 返回的类型为:jasmine.ArrayContaining
![](https://img.haomeiwen.com/i2085791/2348fcaa9d70d8ca.png)
ArrayContaining 类型定义如下:
![](https://img.haomeiwen.com/i2085791/b7ed922ec6898cbf.png)
单步调试:
![](https://img.haomeiwen.com/i2085791/58e736ba2ff43026.png)
返回的是一个新的 matcher?
![](https://img.haomeiwen.com/i2085791/c4a88e68291465c0.png)
就是一个简单的构造器:
![](https://img.haomeiwen.com/i2085791/6689dde3bfca396e.png)
而 objectContaing 的逻辑类似,也是一个简单的构造器。
![](https://img.haomeiwen.com/i2085791/5b5bbf70616d2eb7.png)
把这两个对象进行比较:
![](https://img.haomeiwen.com/i2085791/a230b55e297cbd07.png)
实际参数:
![](https://img.haomeiwen.com/i2085791/d3af9e4b7416cb87.png)
最后返回 true:
![](https://img.haomeiwen.com/i2085791/06c4b7d505ff2531.png)
更多Jerry的原创文章,尽在:"汪子熙":
![](https://img.haomeiwen.com/i2085791/97c4752c0e619c44.png)
网友评论