正文:
初次使用测试,party_bid_core通过一步步测试来对比三种数据结构的存储,得出其优点和不便之处.
一.在三种数据结构之前,首先要在github上建立自己的分支
1.创建git的文件夹。//取名为party_bid_core
2.登录github,点击右下侧的New repository。
3.在弹出的页面中填写Repository name,然后点击左下侧的Create repository按钮。(后会有指导性操作。)//最好分支名字为party_bid_core,方面查找
4.从terminal进入git的文件目录下,然后逐条执行3弹出的内容.
二.对三种结构的总结
第一种数据结构:
activities = [
{
name: "first activity",
sign_ups: [],
bids: []
},
{
name: "first activity",
sign_ups: [
{
name: "仝键",
phone: "13600000000"
},
],
bids: [
{
name: "竞价1",
biddings: [
{
name: "仝键",
phone: "13600000000",
price: "12"
}
]
},
{
name: "竞价2",
biddings: [
]
}
]
}
];
所有的活动存在activities中,每个活动都有自己的活动名,报名人信息,竞价人信息,结构很清晰.但是在存储时每次都要一层层寻找,有点繁琐.例如,如果想要存储bidding时,要首先找到活动名,在此活动中找signs看是否报名,如果报名了,又要找相对应的竞价名,然后存储.
Bidding.save_all = function (biddings) { var current_bid = Bid.get_current_bid(); var activities = Activity.get_activities(); var current_activity = Activity.get_this_activity(activities); var current_activity = _.map(current_activity.bids, function (the_bid) { return the_bid['name'] == current_bid ? the_bid['biddings'] = biddings : ''; }); localStorage.setItem('activities', JSON.stringify(activities)); };
第二种数据结构:
activities = { "0": { name: "first activity", sign_ups: [], bids: [], biddings: {} }, "1": { name: "second activity", sign_ups: [ { name: "仝键", phone: "13600000000" } ], bids: ["竞价1", "竞价2"], biddings: { "竞价1": [ { phone: "13600000000", price: "12" } ], "竞价2": [ ] } } };
每个活动都有自己的key和value,value中又有活动名,活动报名信息,竞价名,竞价报名信息,biddings中,key为竞价名字,value为竞价报名详情,结构也很清晰,存储时少了嵌套,例如:在存储竞价信息时只需通过key来确定存储位置.但是在定义key时却要多想一下,都需要以各自value的长度来增长,以存储竞价为例:
Bidding.create_new_bid = function (activity_id) { var activities = Activity.get_activities(); var current_activity = Activity.get_the_activity(activity_id) var counter = current_activity.bids.length + 1; var bid_name = "竞价" + counter; _.map(activities, function (value, key) { if (key == activity_id) { value.bids.push(bid_name); value.biddings[bid_name] = []; } }); localStorage.setItem("activities", JSON.stringify(activities)) };
第三种数据结构:
activities = [ { id: "0", name: "first activity" }, ]; sign_ups = [ { name: "仝键", phone: "13600000000", activity_id: "0" }, { name: "于硕", phone: "15600000000", activity_id: "0" }, { name: "吴", phone: "13800000000", activity_id: "1" } ] bids = [ { name: "竞价1", activity_name: "0", biddings: [ { phone: "13600000000", price: "9" } ] }, { name: "竞价1", activity_id: "1", biddings: [ { phone: "13600000000", price: "12" }, ] }, { name: "竞价2", activity_id: "1", biddings: [ { phone: "13600000000", price: "10" }, ] } ];
活动名,活动报名,竞价皆分开存储,并且三者都设有activity_id,在获取当前报名或竞价信息时嵌套层数很少很方便,但是结构不算清晰,整体性不强,在存储竞价报名时需判断是否活动报名,这时又要取sign_up的数据,找到对应的id显然是很麻烦的.
三种数据结构各有优劣,使用起来觉得哪一种方便就用那一种,但是在效率方面和减少嵌套来看,个人觉得还是使用设置id的比较方便,在做party_bid时我用的是类似于第一种方法,只是bids单独存储,同第三种数据结构的bids,使用时,也很方便.
三.注意事项
1.测试的含义:测试是在给定某些已知条件的情况下,通过写可以验证所有结果的方法,来得出与expect相同的结果(因为条件已经限定,结果肯定是期待的结果才能是通过测试.但写的方法一定要是能验证所有结果的方法,如果写了一条只是为了能通过当前测试,那测试也是没有意义的)
2.每个测试之前都会给定相应的数据或限定,即前提条件.在测试结束时,清除那些数据.也就是说测试是在不影响功能的条件下进行的,每个测试都测试一个小的模块.
beforeEach(function () { init_activity_database() }); afterEach(function () { localStorage.clear(); })