【问题标题】:What should I write to test the logged out branch?我应该写什么来测试注销的分支?
【发布时间】:2017-04-12 14:38:55
【问题描述】:

为什么我写这样的代码不能测试注销的分支? 这是 Jest 官方示例。链接在这里 https://github.com/facebook/jest/blob/master/examples/jquery 原始测试代码只是测试登录分支,所以我想测试整个分支。但我无法完成它:(

  fetchCurrentUser.mockImplementationOnce(cb =>  {
    cb({
      fullName: 'Johnny Cash',
      loggedIn: true,
    });
  }).mockImplementationOnce(cb =>  {
    cb({
      fullName: 'Johnny Cash',
      loggedIn: false,
    });
  });


  $('#button').click();

  expect(fetchCurrentUser).toBeCalled();
  expect($('#username').text()).toEqual('Johnny Cash - Logged In');

  $('#button').click();

  expect(fetchCurrentUser).toBeCalled();
  expect($('#username').text()).toEqual('Johnny Cash - Logged Out');

【问题讨论】:

    标签: jestjs


    【解决方案1】:

    因为在点击发生之前,fetchCurrentUser 最初只被调用一次。所以你总是得到你的第一个模拟值,即:

    cb = > {
      cb({
        fullName: 'Johnny Cash',
        loggedIn: true,
      });
    }
    

    要测试两者,您可以尝试以下方法:

    let loggedIn = false
    fetchCurrentUser.mockImplementationOnce(cb = > {
      loggedIn = !loggedIn
      cb({
        fullName: 'Johnny Cash',
        loggedIn: loggedIn,
      });
    })
    

    【讨论】:

    • 也总是得到第一个模拟值:(
    • 你能在loggedIn = !loggedIn之前登录loggedIn吗?
    • 第一次点击前,loggedIn:第一次点击后为false,loggedIn:第2次点击前为true,loggedIn:第2次点击后为true,loggedIn:true。绝对第二次调用是错误的。
    • 所以这似乎有效。现在在回调中登录。是否传递了正确的值?
    • 非常感谢,我发现第二个回调函数没有被调用。顺便说一句,你知道为什么吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-09-09
    • 1970-01-01
    • 1970-01-01
    • 2016-05-31
    相关资源
    最近更新 更多