我有一个基本上看起来像这样的文件(缩短)

const octokit = new (require("@octokit/rest"))();
function buildRepo(name) {
  fs.promises
    .readFile("data/settings.json")
    .then(data => JSON.parse(data))
    .then(settings => settings.repositories.find(repo => repo.name === name))
    .then(repo => {
      let repoName = repo.url
        .substring(repo.url.lastIndexOf("/") + 1)
        .slice(0, -4);
      let jobName = repo.name;
      return octokit.repos
        .get({
          owner: "munhunger",
          repo: repoName
        })
        .then(({ data }) => {
          ...
        });
    });
}

module.exports = { buildRepo };


因此,我想针对它从octokit.repos.get函数获取的数据的功能进行测试。但是由于该功能可以访问互联网并查看GitHub存储库,因此我想对其进行模拟。

我使用茉莉花进行了一些测试,我对此进行了略微的阅读,似乎茉莉花应该可以为我模拟一下。

但是,我编写的测试似乎失败了。

const builder = require("./index");

describe("spyOn", () => {
  it("spies", () => {
    spyOnProperty(builder, "octokit");
    builder.buildRepo("blitzbauen");
  });
});


错误为octokit property does not exist。我在这里做错了什么?我需要将octokit添加到module.exports吗?(这看起来很疯狂)

最佳答案

是的,您需要将Octokit添加到module.exports,因为您现在仅导出buildRepo
其他模块无法直接访问未导出模块中的任何内容,因此,如果可以访问,则应将其导出。

另外,您也许可以使用Jasmine模拟整个Octokit模块,因此可以通过任何脚本对模拟版本进行调用,但是由于我对Jasmine的经验有限,因此我不确定您将如何执行此操作

关于javascript - Jasmine spy 未找到属性(property),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/58147842/

10-12 04:42