require.js+qunit的测试驱动开发,并使用依赖注入--“我浏览过的酒店”模块实例(二)
发布在测试驱动开发实践2013年11月2日view:3547
在文章任何区域双击击即可给文章添加【评注】!浮到评注点上可以查看详情。

虽然测试通过了,但是我们意识到,保存酒店数据需要用到browserStore模块。所以我们在代码中加入从存储中读取已浏览酒店列表,并在保存时更新存储。

 /// <reference path="require.js" />

    define([
        "kino.razor",
        "browserStore",
        "exports"
    ],
        function (razor, browserStore, exports) {
            var hotelList = [],
                hasInit = false,
                storeName = "browsed_hotel";

            exports.save = function (item) {
                ///<summary>
                ///保存浏览过的酒店数据
                ///</summary>

                if (!hasInit) {
                    init();
                }

                hotelList.push(item);

                updateStore();
            };

            exports.getDataCount = function () {
                return hotelList.length;
            };

            function init() {
                ///<summary>
                ///初始化
                ///</summary>

                var storeValue = browserStore.getItem(storeName);
                if (storeValue != null) {
                    hotelList = JSON.parse(storeValue);
                }
                hasInit = true;
            }

            function updateStore() {
                browserStore.setItem(storeName, JSON.stringify(hotelList));
            }
        });

测试通过了,并且把数据给存储到了localStorage里enter image description here

但是,当我试着再次刷新浏览器的时候,发现……enter image description here

由于之前运行测试的时候,我们已经把数据给存到了localStorage里,所以测试数据条数的时候出错了。

现在有两种解决办法,一种是在qunit的setup里设置每次测试前清空localStorage,一种是使用测试桩模拟存储。

由于在ie下使用的是userData,需要设置超时才能清空数据,而且不是马上清空,所以我们采用后者。

我们注意到,由于BrowsedHotel模块是有依赖browserStore模块,而且这个模块会去请求它对应的js文件 enter image description here

接下来,我们将用require.js的方式,去把browserStore模块的依赖替换掉。

评论
发表评论
暂无评论

友情链接 大搜车前端团队博客
我的收藏