我是新成员,试图找出如何使用sinon对sessionStorage进行单元测试,在访问该页面时基于url参数。我试了一些东西,但仍然没有得到想要的结果。即使我在未编辑查询参数的情况下更改了“sessionValue”,它也会通过。提前谢谢你。
- ember组件*
beforeModel(transition) {
//transition will contain an object containing a query parameter. '?userid=1234' and is set in the sessionStorage.
if(transition.queryparam.hasOwnProperty('userid')){
sessionStorage.setItem('user:id', transition.queryparam)
}
}
- Ember测试*
test('Session Storage contains query param value', async assert => {
let sessionKey = "user:id";
let sessionValue = "1234"
let store = {};
const mockLocalStorage = {
getItem: (key) => {
return key in store ? store[key] : null;
},
setItem: (key, value) => {
store[key] = `${value}`;
},
clear: () => {
store = {};
}
};
asserts.expect(1);
let spy = sinon.spy(sessionStorage, "setItem");
spy.calledWith(mockLocalStorage.setItem);
let stub = sinon.stub(sessionStorage, "getItem");
stub.calledWith(mockLocalStorage.getItem);
stub.returns(sessionValue);
await visit('/page?userid=1234');
mockLocalStorage.setItem(sessionKey, sessionValue);
assert.equal(mockLocalStorage.getItem(sessionKey), sessionValue, 'storage contains value');
})
1条答案
按热度按时间cyej8jka1#
欢迎来到Ember!
有很多方法可以测试,下面的建议是“一种方法”(我将如何处理与SessionStorage的交互)。
不是在测试中重新创建SessionStorage API,而是在Session Storage周围使用预先制作的代理,您感觉如何?(例如:“不要嘲笑你没有的东西”)
使用:https://github.com/CrowdStrike/ember-browser-services/#sessionstorage
你的应用程序代码如下:
然后在测试中:
使用这种方法,甚至不需要使用sinon:)