我正在尝试为HomeBridge编写插件,但遇到了问题。我首先编写一些代码,然后启动Homebridge并对其进行测试。在一开始就发现了这一点,但是过了一段时间,每次我启动HomeBridge时都添加了更多功能时,为了确保我没有损坏任何东西,进行了大量测试。我主要使用Java,刚开始使用JavaScript。我已经复制了有关如何设计插件的专利。关于如何编写插件的文档很少,因此,关于最佳实践等,我有点儿茫然。我已经简化了代码,因此不会占用太多空间,但是结构是完整的。所以我的问题是:如何测试此代码?
index.js
let Service, Characteristic;
let request = require('request');
module.exports = function(homebridge) {
Service = homebridge.hap.Service;
Characteristic = homebridge.hap.Characteristic;
homebridge.registerAccessory("homebridge-myplugin", "MyPlugin", MyPluginDevice);
};
function MyPluginDevice(log, config) {
this.log = log;
this.url = config['url'];
this.id = config['id'];
}
MyPluginDevice.prototype = {
getSwitchOnCharacteristic: function(callback) {
this.httpRequest(this.url, null, 'GET', function(error, response, body) {
if (error) {
this.log("Fail: %s", error.message);
callback(error);
} else {
const newState = body['state'];
return callback(null, newState);
}
}.bind(this)
);
},
setSwitchOnCharacteristic: function(state, callback) {
this.httpRequest(this.url, requestBody, 'POST', function(error, response, body) {
if (error) {
this.log("Fail: %s", error.message);
callback(error);
} else {
callback();
}
}.bind(this));
},
httpRequest: function(url, body, theMethod, callback) {
request(
{
url: url,
body: body,
method: theMethod,
auth: {
user: 'nexa',
pass: 'nexa',
sendImmediately: false
},
json: true
},
function(error, response, body) {
callback(error, response, body)
})
},
getServices: function() {
let informationService = new Service.AccessoryInformation();
informationService.setCharacteristic(Characteristic.Manufacturer, "My Nexa plugin").setCharacteristic(Characteristic.Model, "My Nexa Plugin Model").setCharacteristic(Characteristic.SerialNumber, "A very special number");
this.switchService = new Service.Switch(this.name);
this.switchService
.getCharacteristic(Characteristic.On)
.on("get", this.getSwitchOnCharacteristic.bind(this))
.on("set", this.setSwitchOnCharacteristic.bind(this));
return [this.switchService];
}
};
一段时间后,我无法为此代码编写测试。我遇到了变量null
的问题,但是我设法解决这个问题,但最终总会导致部分代码未启动。我尝试过:
let MyPluginDevice = require('./index');
let myDevice = new MyPluginDevice(homebridgeMock);
但是这使我遇到getSwitchOnCharacteristic
和setSwitchOnCharacteristic
的问题。我的另一种方法是通过我的homebridgeMock访问MyPluginDevice。但这使我将getSwitchOnCharacteristic
和setSwitchOnCharacteristic
设置为null或不是函数。
我有点主意,我的技能也不是很好,所以我可以发现问题,或者我已经以无法测试的方式实现了代码。我不知道其他开发人员在编写插件时做得如何,但是如果可以运行一些测试,我会感到更加安全。
帮我Stackoverflow,您是我唯一的希望!