用 mocha 测试回流存储的状态变化
Test state change of a reflux store with mocha
我正在针对 Reflux 商店编写 mocha 测试,以验证某个操作是否会导致商店内的状态发生变化。代码的缩小版本如下:
店铺:
var AppStore = Reflux.createStore({
init: function () {
this.foo = false;
},
listenables: [AppActions],
onFooAction: function() {
this.foo = !this.foo;
this.trigger({action: "foo-ed"});
};
});
操作:
var AppActions = Reflux.createActions([
"fooAction"
]);
测试:
it("toggles foo", function () {
expect(AppStore.foo).to.equal(false);
AppStore.listenables[0].fooAction();
expect(AppStore.foo).to.equal(true);
});
但是,第二个断言 (expect(AppStore.foo).to.equal(true);
) 失败了,说明 foo
仍然是错误的。
通过在 onFooAction
方法中执行 console.log
,我已验证该方法确实已触发并且 this.foo
正在切换。
这里有什么我遗漏的基本知识吗:概念上的还是其他方面的?真心希望不是时间问题!
操作发出商店侦听的事件。基本上,您的测试 运行 太快了。
通常,在我的测试中,我假设 Reflux 会做它正确做的事情,我直接调用监听器函数。您需要添加更多断言以确保正确连接 Reflux。
it("is configured", function () {
expect(AppStore.listenables).to.include(AppActions);
expect(AppActions.fooAction).to.be.a('function');
});
it("toggles foo", function () {
expect(AppStore.foo).to.equal(false);
AppStore.onFooAction();
expect(AppStore.foo).to.equal(true);
});
另一种测试方法是使用超时,但是当我在测试中设置超时时,我觉得很脏。
it("toggles foo", function (done) {
expect(AppStore.foo).to.equal(false);
AppStore.listenables[0].fooAction();
setTimeout(function () {
try {
expect(AppStore.foo).to.equal(true);
done();
} catch (e) {
done(e);
}
}, 15);
});
我正在针对 Reflux 商店编写 mocha 测试,以验证某个操作是否会导致商店内的状态发生变化。代码的缩小版本如下:
店铺:
var AppStore = Reflux.createStore({
init: function () {
this.foo = false;
},
listenables: [AppActions],
onFooAction: function() {
this.foo = !this.foo;
this.trigger({action: "foo-ed"});
};
});
操作:
var AppActions = Reflux.createActions([
"fooAction"
]);
测试:
it("toggles foo", function () {
expect(AppStore.foo).to.equal(false);
AppStore.listenables[0].fooAction();
expect(AppStore.foo).to.equal(true);
});
但是,第二个断言 (expect(AppStore.foo).to.equal(true);
) 失败了,说明 foo
仍然是错误的。
通过在 onFooAction
方法中执行 console.log
,我已验证该方法确实已触发并且 this.foo
正在切换。
这里有什么我遗漏的基本知识吗:概念上的还是其他方面的?真心希望不是时间问题!
操作发出商店侦听的事件。基本上,您的测试 运行 太快了。
通常,在我的测试中,我假设 Reflux 会做它正确做的事情,我直接调用监听器函数。您需要添加更多断言以确保正确连接 Reflux。
it("is configured", function () {
expect(AppStore.listenables).to.include(AppActions);
expect(AppActions.fooAction).to.be.a('function');
});
it("toggles foo", function () {
expect(AppStore.foo).to.equal(false);
AppStore.onFooAction();
expect(AppStore.foo).to.equal(true);
});
另一种测试方法是使用超时,但是当我在测试中设置超时时,我觉得很脏。
it("toggles foo", function (done) {
expect(AppStore.foo).to.equal(false);
AppStore.listenables[0].fooAction();
setTimeout(function () {
try {
expect(AppStore.foo).to.equal(true);
done();
} catch (e) {
done(e);
}
}, 15);
});