测试功能的内部变量在测试功能中不可见

时间:2016-08-18 08:58:43

标签: javascript function scope

我试图找出测试失败的原因 - 可能是因为安全令牌变量的值未传递到mocha测试中。我不知道如何通过它。所有关于测试的教程仅适用于返回'Hello World'字符串,但没有任何实际意义。并且有人可以告诉我,我可以在这种类型的功能中测试什么,以及如何。

原始功能:

self.parse

以下是我对此功能的测试:

export function getUserDetails() {
  let securityToken = JSON.parse(sessionStorage.getItem('sectoken'));
  return reqwest({
    url: 'http://api.mywebsite.com/api/Account/UserInfo',
    method: 'GET',
    crossOrigin: true,
    headers: {
      Authorization: `Bearer ${securityToken.access_token}`,
    },
  }).then((response) => JSON.stringify(response));
}

结果我收到错误:

//getUserDetails
describe('getUserDetails', () => {
  it('Should return user details of curently logged in user',() => {

    getUserDetails().then(function(response){
      console.log(securityToken.access_token);
      response.toExist().toBeA('string');
    });
  });
});

2 个答案:

答案 0 :(得分:0)

您也必须返回securityToken。否则在功能之外将无法访问。

export function getUserDetails() {
  let securityToken = JSON.parse(sessionStorage.getItem('sectoken'));
  return [securityToken, reqwest({
    url: 'http://api.mywebsite.com/api/Account/UserInfo',
    method: 'GET',
    crossOrigin: true,
    headers: {
      Authorization: `Bearer ${securityToken.access_token}`,
    },
  }).then((response) => JSON.stringify(response))];
}

然后在测试功能中:

getUserDetails().then(function(securityToken, response){
  console.log(securityToken.access_token);
  response.toExist().toBeA('string');
});

答案 1 :(得分:0)

为了使测试工作,我必须在每个测试函数上调用第一个loginUser函数,并将令牌返回到它:

 //getUserDetails
    describe('getUserDetails', () => {
      it('Should return user details of curently logged in user',() => {
        loginUser(rooturl,'abc@abc.pl', 'Password!1232').then(function(token){
          getUserDetails().then(function(userDetails){
            expect(userDetails).toExist();
          });
        });
      });
    });

谢谢你们!