51

我正在尝试为谷歌应用脚​​本设置单元测试,我发现了两个项目:

https://code.google.com/p/gas-unit/ https://code.google.com/p/gasunit/

所以我很困惑使用哪个:-)

我刚刚尝试了未连字符的gasunit,它似乎期望脚本嵌入到电子表格中,我有点不清楚如何做......而且我要测试的脚本是基于网络的脚本而不是电子表格那些

我在测试带连字符的气体单元时运气更好,它成功地向我发送了测试的电子邮件输出并在我的谷歌网站上生成了一个结果页面:

https://sites.google.com/site/testappscript2/TestResults

所以我现在打算使用gas-unit,但我真的很想看到谷歌整合了一些官方测试框架。特别是我想找到一些方法让这些脚本以某种频率运行以向我发送结果。我也很想获得一些 BDD;见我的其他帖子:

如何让 Cucumber/Capybara/Mechanize 与外部非 Rails 站点一起工作 如何使用 capybara has_text

来吧谷歌,你所有的浴室里都有“测试石头,调试糟粕”吗?如何更好地支持 Google Apps 脚本测试?

4

6 回答 6

18

您可以试用QUnit for Google Apps Script。它是一个将QUnit的补丁变成一个带有API 文档的 Google Apps 脚本库。

您所需要的只是一个脚本项目,该项目导入一个 QUnit 库(例如带有项目 key 的库MxL38OxqIK-B73jyDTvCe-OBao7QLBR4j)并具有一个 doGet 函数,该函数使用 URL 参数配置 QUnit,也可以选择使用您自己的设置,加载一个运行测试的函数,以及最后返回 QUnit.getHtml()。这是一个例子:

function doGet( e ) {
  QUnit.urlParams( e.parameter );
  QUnit.config({ title: "Unit tests for my project" });
  QUnit.load( myTests );
  return QUnit.getHtml();
};

// Imports the following functions:
// ok, equal, notEqual, deepEqual, notDeepEqual, strictEqual,
// notStrictEqual, throws, module, test, asyncTest, expect
QUnit.helpers(this);

function myTests() {
  module("dummy module");

  test("dummy test", 1, function() {
    ok(true);
  });
}

然后授权脚本,保存它的版本,发布脚本项目(“部署为 Web 应用程序”)并使用浏览器转到测试 URL(“最新代码”)。您的测试将运行,结果将通过 HtmlService 显示。您可以单击它们以查看它们的断言,但在撰写本文时,由于Caja 问题 1688,您可能无法在 Firefox 20 和 21 中执行此操作。

于 2013-04-16T10:23:10.073 回答
12

我刚刚为我的谷歌电子表格插件开发和测试编写了另一个名为 GasT 的测试框架。

GasT 是适用于 Google Apps Script 的 TAP 兼容测试框架。它提供了一种简单的方法来验证您编写的 GAS 程序是否按预期运行。https://github.com/huan/gast

我的目标是获得一个简单的点击工具,如磁带(用于 javascript)或 bats(用于 bash)。测试套件格式非常清晰:

var gastLibUrl = 'https://raw.githubusercontent.com/zixia/gast/master/src/gas-tap-lib.js'
eval(UrlFetchApp.fetch(gastLibUrl).getContentText())

var test = GasTap.setPrintDriver('Logger') 

function gast() {

  test('do calculation right', function (t) {    
    var i = 3 + 4
    t.equal(i, 7, 'I can calc 3 + 4 = 7')
  })

  test('Spreadsheet exist', function (t) {
    var ss = SpreadsheetApp.openById('1TBJpvlW3WWney4rk1yW5N9bAP8dOMkWxI97dOtco-fc')
    t.ok(ss, 'I can open spreadsheet')
  })

  test.finish()
}

希望有人会喜欢它。:)

有一个在线版本,您可以在这里查看:https ://docs.google.com/spreadsheets/d/19M2DY3hunU6tDQFX5buJmZ_f3E8VFmlqAtodyC-J8Ag/edit#gid=0&vpid=A1

GasT - Google Apps 脚本测试框架,兼容测试任何协议

于 2015-12-01T18:15:23.260 回答
9

clasp工具提供了从命令行在本地开发和部署 Apps 脚本项目的能力。

clasp回购

  1. npm install -g @google/clasp
  2. 启用 Apps 脚本 API:https ://script.google.com/home/usersettings
  3. 本地开发,使用clasp工具部署。

编辑node-google-apps-script项目已被弃用以支持clasp

node-google-apps-script包允许使用标准 JavaScript 包和自动化测试工具。

  1. npm install -g node-google-apps-script.
  2. 完成授权步骤以提供客户端机密,以允许上传和导入 Apps 脚本项目。
  3. 使用gulpgrunt用于测试运行正常 JavaScript 项目的任何东西。

有一个使用此工作流程的官方 Google 示例可用。

有关更多详细信息,请参阅Google Apps 开发人员博客公告

下载文件后,将它们重命名为以结尾.ts而不是.js. 一旦它们是 TypeScript,ava就可以用来测试它们。将它们转换为 TypeScript 还可以让人们使用 ES6 语言功能。

于 2016-05-05T17:30:09.223 回答
2

我创建了 gas-unit ( https://code.google.com/p/gas-unit/ ) 并且在过去的几天里花了一些时间整理示例并添加了一个 HTML 测试运行器。

我自己一直在使用它进行一些电子表格操作,我一直在取得相当的成功。我也一直在将 Jasmine 用于非 GAS 客户端 js 工作,并且非常喜欢。我怀念 gas-unit 轻松创建间谍的能力,我喜欢 BDD 规范编写风格。

gas-unit 对我来说是一个很好的学习练习,它确实有效,尽管范围和闭包可能存在未被发现的问题——这是我在 DOM 操作之外的第一个重要的 js 练习。

我认为在 GAS 中进行测试的未来必须使用 QUnit(正如 Adam 建议的那样)或 Jasmine 的端口。我快速浏览了移植 Jasmine 需要什么,但还没有找到时间来解决它。

于 2013-04-18T13:24:23.447 回答
2

查看 QUnitGS2 - 一个使用最新版本 QUnit (v2.10.1) 的新应用程序脚本库。

于 2020-08-02T08:22:04.433 回答
-1

另一个用于在 Google Scripts 中进行单元测试的库是GSUnit

项目密钥: MIUhnnCDES0N3YHPEWX9DUtkh30YExdAc

GSUnit 是一个基于 Google Apps 脚本的测试框架,基于 Kent Beck 的 JUnit 和 Edward Hieatt 的 JSUnit

于 2018-06-28T07:27:30.523 回答