Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

一个关于测试用例的问题 #11

Open
Dafrok opened this issue Sep 25, 2017 · 0 comments
Open

一个关于测试用例的问题 #11

Dafrok opened this issue Sep 25, 2017 · 0 comments

Comments

@Dafrok
Copy link
Contributor

Dafrok commented Sep 25, 2017

首先上有问题的代码段 /test/index.js 第 16 行至 51 行:

router.setMode('hash');
router.start();

let routeTimes = 0;
let App = san.defineComponent({
    initData() {
        return {
            routeTimes: 0
        };
    },

    components: {
        'router-link': Link
    },

    route() {
        this.data.set('routeTimes', this.data.get('routeTimes') + 1);
        routeTimes = this.data.get('routeTimes');
    },

    template: '<div><router-link to="./errorrik">Click here to hash route, quickly</router-link>  <b title="{{route.query.name}}">{{route.query.name}}</b></div>'
});

router.add({
    rule: '/synthesis/hash/:name',
    Component: App
});

location.hash = '/synthesis/hash/erik';

setTimeout(() => {
    expect(routeTimes).toBe(1);
    expect(document.getElementById('main').getElementsByTagName('b')[0].title).toBe('erik');
    detectDone();
}, 500);

根据断言的描述 hash mode, link to route,可以得知这是测试 hash mode 下 router-link 组件是否正常工作的测试用例。

这段代码的逻辑是先创建一个组件,然后挂到路由上,然后同步更改 hash 值,再异步检测组件中的 router-link 是否被点击。从同步的 hash 变更到开始检测的延迟为 500 毫秒。
显然,如果在 500 在毫秒内进行点击的话,location.hash 会提前发生变化,于是定时器中的句柄执行后将不会得到期望的值。

然而 router-link 提示是 Click here to hash route, quickly,于是我根据提示,用高于 500ms / 次的频度迅速点击该链接,导致了单元测试失败;而等到 500ms 之后再去点击,却是(意料之中的)成功。

因此我推测这个测试用例在某种程度上是有问题的。要么是链接的提示产生了误导,要么是断言对测试项的描述有歧义,亦或测试用例本身的实现不够严谨。

P.S. 75 行的 html5 mode 的测试用例有同样的问题。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant