如何为此JavaScript代码编写测试?

时间:2018-11-09 20:08:52

标签: javascript testing plugins

我正在尝试为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); 

但是这使我遇到getSwitchOnCharacteristicsetSwitchOnCharacteristic的问题。我的另一种方法是通过我的homebridgeMock访问MyPluginDevice。但这使我将getSwitchOnCharacteristicsetSwitchOnCharacteristic设置为null或不是函数。

我有点主意,我的技能也不是很好,所以我可以发现问题,或者我已经以无法测试的方式实现了代码。我不知道其他开发人员在编写插件时做得如何,但是如果可以运行一些测试,我会感到更加安全。

帮我Stackoverflow,您是我唯一的希望!

0 个答案:

没有答案