@@ -171,8 +171,11 @@ export default {
isSkuCombSelected() {
return isAllSelected(this.sku.tree, this.selectedSku);
},
+ hasSku() {
+ return !this.sku.none_sku;
+ },
selectedSkuComb() {
- if (this.sku.none_sku) {
+ if (!this.hasSku) {
return {
id: this.sku.collection_id,
price: Math.round(this.sku.price * 100),
diff --git a/test/unit/mock/sku.js b/test/unit/mock/sku.js
index e43b438bb..fbb429598 100644
--- a/test/unit/mock/sku.js
+++ b/test/unit/mock/sku.js
@@ -27,42 +27,6 @@ var _global = {
"k_s": "s2"
}],
"list": [{
- "id": 2259,
- "price": 100,
- "discount": 100,
- "code": "",
- "s1": "1215",
- "s2": "1193",
- "s3": "0",
- "s4": "0",
- "s5": "0",
- "extend": null,
- "kdt_id": 55,
- "discount_price": 0,
- "stock_num": 110,
- "stock_mode": 0,
- "is_sell": null,
- "combin_sku": false,
- "goods_id": 946755
- }, {
- "id": 2260,
- "price": 100,
- "discount": 100,
- "code": "",
- "s1": "1215",
- "s2": "1194",
- "s3": "0",
- "s4": "0",
- "s5": "0",
- "extend": null,
- "kdt_id": 55,
- "discount_price": 0,
- "stock_num": 0,
- "stock_mode": 0,
- "is_sell": null,
- "combin_sku": false,
- "goods_id": 946755
- }, {
"id": 2257,
"price": 100,
"discount": 100,
@@ -222,10 +186,10 @@ var _global = {
"alias": "2oml0r0n5vytj",
"quota": 15,
"is_virtual": "0",
- "quota_used": 0,
+ "quota_used": 2,
"goods_info": {
- "title": "\u725b\u5976\u6d4b\u8bd5",
- "picture": ["https:\/\/img.yzcdn.cn\/upload_files\/2017\/03\/16\/Fs_OMbSFPa183sBwvG_94llUYiLa.jpeg?imageView2\/2\/w\/100\/h\/100\/q\/75\/format\/webp"],
+ "title": "测试商品",
+ "picture": ["https:\/\/img.yzcdn.cn\/upload_files\/2017\/03\/16\/Fs_OMbSFPa183sBwvG_94llUYiLa.jpeg?imageView2\/2\/w\/100\/h\/100\/q\/75\/format\/jpg"],
"price": 1,
"origin": ""
}
diff --git a/test/unit/specs/sku.spec.js b/test/unit/specs/sku.spec.js
index fdedd079e..20cafa45f 100644
--- a/test/unit/specs/sku.spec.js
+++ b/test/unit/specs/sku.spec.js
@@ -3,20 +3,106 @@ import { mount } from 'avoriaz';
import { DOMChecker } from '../utils';
import data from '../mock/sku';
+const { skuHelper } = Sku;
const goods = data.goods_info;
goods.picture = goods.picture[0];
-describe('Sku', () => {
+describe('Sku', (done) => {
let wrapper;
afterEach(() => {
wrapper && wrapper.destroy();
});
- it('default', () => {
+ it('default', (done) => {
wrapper = mount(Sku, {
attachToDocument: true,
propsData: {
- show: false,
+ value: true,
+ sku: data.sku,
+ goods: goods,
+ resetStepperOnHide: true
+ }
+ });
+
+ DOMChecker(wrapper, {
+ text: {
+ '.van-sku__goods-name': goods.title,
+ '.van-sku__price-num': '1.00'
+ },
+ value: {
+ '.van-stepper__input': '1'
+ },
+ src: {
+ '.van-sku__goods-img': 'https://img.yzcdn.cn/upload_files/2017/02/21/FjKTOxjVgnUuPmHJRdunvYky9OHP.jpg!100x100.jpg'
+ }
+ });
+
+ // 测试默认选中
+ const selectedSku = skuHelper.getSelectedSkuValues(data.sku.tree, wrapper.vm.selectedSku);
+ expect(selectedSku[0].id).to.equal('30349');
+
+ // 关闭sku弹层
+ const closeCallback = sinon.spy();
+ const closeIcon = wrapper.find('.van-sku__close-icon')[0];
+ wrapper.vm.$on('sku-close', closeCallback);
+ closeIcon.trigger('click');
+ wrapper.vm.$nextTick(() => {
+ expect(closeCallback.calledOnce).to.be.true;
+ done();
+ });
+ });
+
+ it('click buy and addCart', (done) => {
+ wrapper = mount(Sku, {
+ attachToDocument: true,
+ propsData: {
+ value: true,
+ sku: data.sku,
+ goods: goods
+ }
+ });
+
+ const buyCallback = sinon.spy();
+ const addCartCallback = sinon.spy();
+ const buyBtn = wrapper.find('.van-sku__buy-btn')[0];
+ const addCartBtn = wrapper.find('.van-sku__add-cart-btn')[0];
+ wrapper.vm.$on('buy-clicked', buyCallback);
+ wrapper.vm.$on('add-cart', addCartCallback);
+
+ // 未选择完整规格时,弹出toast提示
+ buyBtn.trigger('click');
+ wrapper.vm.$nextTick(() => {
+ const toastText = document.querySelector('.van-toast__text');
+ expect(toastText.textContent).to.equal('请选择完整的规格');
+ expect(buyCallback.calledOnce).to.be.false;
+
+ // 选择完整规格时,未填留言时,弹出toast提示。
+ wrapper.find('.van-sku-row-group')[1].find('.van-sku-row__item')[0].trigger('click');
+ buyBtn.trigger('click');
+ wrapper.vm.$nextTick(() => {
+ expect(toastText.textContent).to.equal('请填写留言1');
+ expect(buyCallback.calledOnce).to.be.false;
+
+ // 触发buy-clicked事件
+ const requiredMessage = wrapper.find('.van-cell--required .van-field__control')[0];
+ requiredMessage.element.value = 'test';
+ requiredMessage.trigger('input');
+ wrapper.vm.$nextTick(() => {
+ buyBtn.trigger('click');
+ addCartBtn.trigger('click');
+ expect(buyCallback.calledOnce).to.be.true;
+ expect(addCartCallback.calledOnce).to.be.true;
+ done();
+ });
+ });
+ });
+ });
+
+ it('change step value', (done) =>{
+ wrapper = mount(Sku, {
+ attachToDocument: true,
+ propsData: {
+ value: true,
sku: data.sku,
goods: goods,
quota: data.quota,
@@ -24,20 +110,47 @@ describe('Sku', () => {
}
});
- DOMChecker(wrapper, {
- text: {
- '.van-order-goods-header a': '起码运动馆',
- '.van-order-goods-price .van-cell__value span': '¥10.50',
- '.van-card__title': item1.title,
- '.van-card__num': 'x ' + item1.num,
- '.van-card__price': '¥10.50'
- },
- value: {
- '.van-order-goods-message textarea': '留言留言'
- },
- src: {
- '.van-card__thumb img': item1.img_url
+ // 点击减号
+ const minusBtn = wrapper.find('.van-stepper__minus')[0];
+ minusBtn.trigger('click');
+ wrapper.vm.$nextTick(() => {
+ const toastText = document.querySelector('.van-toast__text');
+ expect(toastText.textContent).to.equal('至少选择一件');
+
+ // 手动修改购买数量
+ const stepperInput = wrapper.find('.van-stepper__input')[0];
+ stepperInput.element.value = 20;
+ stepperInput.trigger('input');
+ wrapper.vm.$nextTick(() => {
+ expect(+stepperInput.element.value).to.equal(data.quota - data.quota_used);
+
+ // 达到购买上限时,点击加号
+ const plusBtn = wrapper.find('.van-stepper__plus')[0];
+ plusBtn.trigger('click');
+ wrapper.vm.$nextTick(() => {
+ expect(toastText.textContent).to.equal(`限购${data.quota}件,您已购买${data.quota_used}件`);
+ done();
+ });
+ });
+ });
+ });
+
+ it('test none sku', (done) => {
+ data.sku.none_sku = true; // eslint-disable-line
+
+ wrapper = mount(Sku, {
+ attachToDocument: true,
+ propsData: {
+ value: false,
+ sku: data.sku,
+ goods: goods
}
});
+
+ wrapper.vm.value = true;
+ wrapper.vm.$nextTick(() => {
+ expect(wrapper.find('.van-sku-group-container').length).to.equal(0);
+ done();
+ });
});
});